使用Lambdas取消引用Int值

sud*_*ato 2 java sorting lambda arraylist java-8

我正在尝试排序和打印ArrayList按ID排序的内容.

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

我相信我的问题是因为p1p2期望返回对象,但它们正在获得int价值.我该如何解决这个问题?

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

Ell*_*sch 6

使用Integer.compare(int, int)像,

clientArr.sort((p1, p2) -> Integer.compare(p1.getAccount().getID(), 
                                           p2.getAccount().getID()));
Run Code Online (Sandbox Code Playgroud)

此外,您的for-each循环可以重写为

clientArr.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

  • 您还可以为Collection :: sort方法调用创建一个Comparator,它为您执行Integer :: compare调用和getter调用:clientArr.sort(Comparator.comparingInt(p - > p.getAccount().getId() )); (3认同)
  • 既然`clientArr`,尽管它的名字是一个`List`(否则你不能在它上面调用`sort`),`Stream.of(clientArr)`应该是`clientArr.stream()`,但它会是甚至更简单地使用`clientArr.forEach(System.out :: println);`.你编写它的方式,它创建一个单独的元素流,换句话说,相当于`System.out.println(clientArr);`,它也恰好打印列表内容,但在一行. (2认同)