使用 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;
}
简单地从正面和背面填充元素到结果列表。
Final Output
将输出打印为{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;
}
简单地从正面和背面填充元素到结果列表。
Final Output