-1

Am trying to do a simple merge sort for a generic type T where T can be a string, integer but compiler seems to complain saying method merge in class MergeSortTask cannot be applied to given types

 import java.util.* ;                                                               
 import java.lang.* ;                                                                 
 import java.util.concurrent.*;                                                      
 import java.lang.Comparable;                                                                                                                                            




class MergeSortTask<T> extends RecursiveAction {                                         
      List<T> myList;                                                                     
      String typeList;                                                                                                                                                        

      public MergeSortTask(String typeList) {                                                     
           this.typeList = typeList;  
      }          

      @Override                                                                           
      public void compute() {                                                                     
           mergeSort(myList);                                                          
      }

      public List<T> mergeSort(List<T> list) {                          
           if (list.size() == 1) {                                                                     
                    return list;                                                                
           } else {                                                                                    
                    int mid = list.size()/2;                                                            
                    List<T> left = mergeSort(list.subList(0,mid));                                     
                    List<T> right = mergeSort(list.subList(mid,list.size()));                          
                    return merge(left, right);                                               
           }                                                                           
       }                                                                                                                                                                       


       private <T extends Comparable<T>> List<T> merge(List<T> left, List<T> right) {                                                                                                  
            List<T> newer = new ArrayList<>();                                                  
            while (!left.isEmpty() && !right.isEmpty()) {                                               
                    if (left.get(0).compareTo(right.get(0)) < 0) {                                                                   
                             newer.add(left.get(0));                                                             
                             left.remove(0);                                                             
                    } else {                                                                                    
                             newer.add(right.get(0));                                                            
                             right.remove(0); 
                    }                                                                           
            }                                                                                   
             newer.addAll(left);                                                                 
             newer.addAll(right);                                                                
             return newer;                                                              
       }                                                                           
}                                
Jia Rong
  • 3
  • 2

1 Answers1

-1

You are passing left and right variables (which can be String or Integer) to merge method as arguments.

So you have to modify your code like this:

if (left.get(0).compareTo(right.get(0)) < 0) {
    newer.add(left.get(0));
    left.remove(0);
}
else {
    newer.add(right.get(0));
    right.remove(0);
}
MC Emperor
  • 22,334
  • 15
  • 80
  • 130
Nafaz M N M
  • 1,558
  • 2
  • 27
  • 41