Specifics
---------------------------------------------------------------------------
public interface IntegerOperation {
Integer performOperation(Integer value);
}
public class AddOneOperation implements IntegerOperation {
public class AddOneOperation implements IntegerOperation {
@Override
public Integer performOperation(Integer value)
{
return value+1;
}
}
-------------------------------------------------------------------------
Generics
-------------------------------------------------------------------------
// work with a list of any type, and return a list of a different type
// E.g., turning a String parameter into an Integer
public interface GenericOperation<A, B> {
B performOperation(A value);
}
public class StringLengthOperation implements GenericOperation<String, Integer>
{
@Override
public Integer performOperation (String value)
return value.length();
}
------------------------------------------------------------------------
for (final Integer number: numbers){
res.add(op.performOperation(number));
}
res.add(op.performOperation(number));
}
// 7-19 Write a method that replicates a list of Itnegers, with 1 added to each element. public static ListaddOne(final List numbers) { final List res = new ArrayList (numbers.size()); for ( final Integer number: numbers) { res.add(number+1); } return res; }
// To allow any Integer operation, you can define a new
// interface, IntegerOperation, which has one
// method, taking an Integer, and returning an Integer
public interface IntegerOperation
{
Integer performOperation(Integer value);
}
public class AddOneOperation implements IntegerOperation
{
@Override
public Integer performOperation(Integer value)
{
return value+1;
}
}
// 7-20 Performa any integer operation on a list
public static List updateList(final List numbers, final IntegerOperation op)
{
final List res = new ArrayList<>(number.size());
for (final Integer number: numbers)
{
res.add(op.performOperation(number));
}
return res;
}
// 7-21 Testing the updateList method
@ Test
public void positiveList()
{
final List numbers = Arrays.asList(4,7,2,-2,8,-5,-7)
final List expected = Arrays.asList(4,7,2,2,8,5,7);
final List actual = Lists.updateList(nubmers, new IntegerOperation()
{
@Override
public Integer performOperation(Integer value)
return Math.abs(value);
});
assertEquals(expected, actual);
}
// 7-22 Mapping a list into a different type public static List mapList(final List values, final GenericOperation op ) { final List res = new ArrayList<>(values.size()); for (final A a: values) res.add(op.performOperation(a)); return res; } // 7-23 Testing the list mapping functionality @Test public void stringLengths() { final Liststrings = Arrays.asList("acing", "the", "java", "interview" ); final List expected = Arrays.asList(5,3,4,9); final List actual = List.mapList(strings, new StringLengthOepration() ); assertEquals(expected, actual); }