我正在尝试排序并打印按ID排序的ArrayList
。
clientArr.sort( (p1, p2) -> p1.getAccount().getID().compareTo(p2.getAccount().getID()) );
for(Client client : clientArr)
System.out.println(client);
我认为我的问题是因为p1
和p2
期望返回对象,但它们会获得int
个值。我该如何解决这个问题?
ArrayList存储客户端对象。客户端类包含String值(在此示例中不重要),它创建Account对象的实例。在Account类中存储了int ID值。这就是我需要的价值
答案 0 :(得分:6)
使用Integer.compare(int, int)
之类的,
clientArr.sort((p1, p2) -> Integer.compare(p1.getAccount().getID(),
p2.getAccount().getID()));
此外,您的for-each
循环可以重写为
clientArr.forEach(System.out::println);
答案 1 :(得分:1)
您可以一次性完成所有这些工作,并以Java8建议的功能性方式完成 -
使用Stream API的排序并提供比较器作为方法参考。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class ComparingTest {
public static void main(String[] args) {
List<Test> mTestList = new ArrayList<>();
mTestList.add(new Test(10));
mTestList.add(new Test(1));
mTestList.add(new Test(5));
mTestList.add(new Test(4));
mTestList.add(new Test(2));
mTestList.add(new Test(8));
mTestList.add(new Test(7));
mTestList.stream().sorted(Comparator.comparingInt(Test::getId)).forEach(System.out::println);
}
}
class Test {
public int id;
Test(int id) {
this.id = id;
}
public int getId() {
return id;
}
@Override
public String toString() {
return String.valueOf(getId());
}
}