使用 Comparator 对 Arraylist 进行排序

Sort an Arraylist using Comparator

将输出打印为{first max,first min,second max,second min,third max,third min and so on.....}

   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Collections;
   import java.util.Comparator;
   import java.util.Iterator;
   import java.util.List;

  import compl.compl;

  public class Arraylist1 {


public static void main(String args[]){

    List <Integer>list= new ArrayList <Integer> ( );

 list.add(20);
 list.add(30);
 list.add(70);
 list.add(50);
 list.add(60);
 list.add(40);

  Comparator<Integer> cmp=new Comparator<Integer>() {

    @Override
    public int compare(Integer o1, Integer o2) {
        // TODO Auto-generated method stub
        int pos=0;
        if(pos%2==0){
            if(o1<o2){
                return 1; 
            }
            }
           if(pos%2!=0){
            if(o1>o2){
                return -1; 
            }
            }
            pos++;  
        }
    }
};

Collections.sort(list, cmp);
for(int i=0;i<list.size();i++){
    System.out.println(list);
}


 }
}

出现如下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    This method must return a result of type int

    at Arraylist1.compare(Arraylist1.java:51)
    at Arraylist1.compare(Arraylist1.java:1)
    at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324)
    at java.util.TimSort.sort(TimSort.java:189)
    at java.util.TimSort.sort(TimSort.java:173)
    at java.util.Arrays.sort(Arrays.java:659)
    at java.util.Collections.sort(Collections.java:217)
    at Arraylist1.main(Arraylist1.java:67)

不明白我为什么会收到这个错误,我猜这是因为比较器需要 return 类型,但在我的例子中无法指定 return 类型。

您的代码不符合要求。为此,您在所有情况下都有 return 值 n 比较器。

 if (pos % 2 == 0) {
      if (o1 < o2) {
           return 1;
      } else if (o1 > o2) {
           return -1;
      } 
      pos++;
      TODO: defie return value here
} else { TODO: define return value here }

重要说明:您的变量 pos 将始终为 0。因为它是方法变量,并且每次调用方法时都会创建它。如果你只需要点直播,你可以定义比较器为(降序)

return o2.compareTo(o1);

按升序排列

return o1.compareTo(o2);

您的错误与 comparator/collections 无关,甚至与 Java 无关。 在编程中,函数必须 return 其 return 值用于 any 输入。

对于 pos%2 != 0.

的情况,您的 compare 函数不会 return 任何事情

自定义比较器 cmp 刚刚被分配任务以降序排列 list

Comparator<Integer> cmp = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        if (o1 < o2) {
            return 1;
        } else {
            return -1;
        }
    }
};

Collections.sort(list, cmp);

Output: 70 60 50 40 30 20

然后调用方法modifyList来满足max和min的要求。在此,我创建了另一个 List<Integer>,它将从上面的输出列表中选择元素并按 1st max, 1st min, 2nd max, 2nd min ... so on... 顺序分配它们

public static List<Integer> modifyList(List<Integer> list) {
    List<Integer> result = new ArrayList<>(list.size());

    int i = 0, j = list.size() - 1;
    int r = 0;
    while (r < list.size()) {
        result.add(r++, list.get(i++));
        if (i < j)
            result.add(r++, list.get(j--));
    }

    return result;
}

简单地从正面和背面填充元素到结果列表。

Complete program code here

Final Output