title: Refactoring duplicated and highly coupled code
body: <p>I have three concrete classes-</p>
  
  <pre><code>public class ClassA{
      public C1 processA(C1 c1){
          //lots of ugly code that copies
          //one field to another
          //return c1
      }
      public List&lt;C1&gt; processA(List&lt;C1&gt; c1s){
          //iterate over c1s
              //call process(c1)
              //add returned value to list
  
          //return list
      }
  }
  
  
  public class ClassB{
      public C2 processB(C2 c2, C3 c3){
          //lots of ugly code that copies
          //one field to another
          //return c2
      }
      public List&lt;C2&gt; processB(List&lt;Pair&lt;C2, C3&gt; pairs){
          //iterate over pairs
              //call process(c2, c3)
              //add returned value to list
  
          //return list
      }
  }
  
  public class ClassC{
      public C4 processC(C4 c4, C5 c5, C1 c1){
          //lots of ugly code that copies
          //one field to another
          //return c4
      }
      public List&lt;C4&gt; processC(List&lt;Triple&lt;C4, C5, C1&gt; triples){
          //iterate over triples
              //call process(c4, c5, c1)
              //add returned value to list
  
          //return list
      }
  }
  </code></pre>
  
  <p>I would like to remove duplication in the process(List...) methods. I don't care about the processA(C1), processB(C2,C3), processC(C4,C5,C1) methods, they will remain the same. What are my options in refactoring this code?</p>