简体   繁体   English

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

[英]How to sort a List of objects based on one variable using lambda expression?

I tried to use lambda expressions to sort the list of objects based on name in JDK 1.8. 我试图使用Lambda表达式根据JDK 1.8中的名称对对象列表进行排序。 but it shows compilation error: 但显示编译错误:

The left-hand side of an assignment must be a variable 作业的左侧必须是变量

Code: 码:

    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()));

You are missing a paren: 您缺少一个括号:

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

However, you would be advised to use a much more concise syntax: 但是,建议您使用更简洁的语法:

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

Then there will be no parens to miss. 这样便不会错过任何机会。 With the Streams API usage we usally apply static imports liberally, so 通过使用Streams API,我们通常自由地应用静态导入,因此

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

I see you don't assign the stream object and do not apply any terminal operations, so maybe you should be aware that the expression above has still taken no action on your data. 我看到您没有分配流对象并且不应用任何终端操作,因此也许您应该意识到上面的表达式仍未对数据执行任何操作。 You just declared that the stream will be sorted once you apply a terminal operation. 您刚刚声明一旦应用终端操作,流将被排序。

Use 采用

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM