使用Lambdas取消引用Int值

时间:2017-04-19 02:17:12

标签: java sorting arraylist lambda java-8

我正在尝试排序并打印按ID排序的ArrayList

clientArr.sort( (p1, p2) -> p1.getAccount().getID().compareTo(p2.getAccount().getID()) );
for(Client client : clientArr)
    System.out.println(client);

我认为我的问题是因为p1p2期望返回对象,但它们会获得int个值。我该如何解决这个问题?

ArrayList存储客户端对象。客户端类包含String值(在此示例中不重要),它创建Account对象的实例。在Account类中存储了int ID值。这就是我需要的价值

2 个答案:

答案 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());
    }
}