如何使用lambda表达式基于一个变量对对象列表进行排序?

时间:2015-02-03 14:46:54

标签: java list sorting lambda

我尝试使用lambda表达式根据JDK 1.8中的名称对对象列表进行排序。但它显示编译错误:

  

作业的左侧必须是变量

代码:

    Train trains = new Train();
    trains.setName("Yerlin");
    trains.setCode("YYT");
    Train trains2 = new Train();
    trains2 .setName("Delhi");
    trains2 .setCode("DEH");
List<Train > traindetail= new ArrayList<Train >();
    traindetail.add(trains);
    traindetail.add(trains2);
    traindetail.stream().sorted(Train object1 , Train object2) -> object1.getName().compareTo(object2.getName()));

2 个答案:

答案 0 :(得分:5)

你错过了一个paren:

airport.stream().sorted(Train object1 , Train object2) -> object1.getName().compareTo(object2.getName()));
                        ^--here

但是,建议您使用更简洁的语法:

airport.stream().sorted(Comparator.comparing(Train::getName));

然后就不会错过。使用Streams API,我们通常会自由地应用静态导入,所以

airport.stream().sorted(comparing(Train::getName));

我看到你没有分配流对象而且不应用任何终端操作,所以你应该知道上面的表达式仍然没有对你的数据采取任何行动。您刚刚声明应用终端操作后将对流进行排序。

答案 1 :(得分:4)

使用

//                      v add ( here
airport.stream().sorted((Train object1 , Train object2) ->
  object1.getName().compareTo(object2.getName()));