Wednesday, October 14, 2015

[7.19-7.23] Generics

1. Implementation

Specifics
---------------------------------------------------------------------------


public interface IntegerOperation { 
    Integer performOperation(Integer value); 
}
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));
}


// 7-19 Write a method that replicates a list of Itnegers, with 1 added to each element. 

public static List addOne(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 List strings = 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);

}


No comments:

Post a Comment