如何基于嵌套对象属性对列表进行排序

时间:2019-10-03 16:02:51

标签: java java-8 java-stream

我是Java流的新手,我只想对对象的键进行排序。

所以,我尝试这样的方法,它能起作用

List<FooSelect> li= Arrays.stream(obj.getFoos().getFoo())  //Stream<Foo>
    .map(Foo::getSelect)                                   //Stream<FooSelect>
    .sorted(Comparator.comparing(FooSelect::getFoosKey))   //Stream<FooSelect>
    .collect(Collectors.toList());

这会根据我想要的内容进行排序。

但是我得到的结果是在List<FooSelect>对象中,尽管我想要在List<Foo>中。

排序后如何更改映射?

我要在

中再次更改响应
//Stream<Foo> after it is sorted.

我想要类似的东西

List<Foo> li = same result of code above;

Class : FooSelect
just has some String fields
string FooKey
string FooTKey

以及该方法的getter和setter(其中一个是我正在排序的getFoosKey)

Class: Foo
private FooSelect select
private FooInsert insert

Foo(select, insert)

public FooSelect getSelect() {
return select; }

相同的设置方法。

2 个答案:

答案 0 :(得分:1)

删除mapmap更改流中的对象。将排序后的语句更新为

.sorted(Comparator.comparing(f -> f.getSelect().getFoosKey()))

答案 1 :(得分:0)

您可以在Comparator.comparing中使用lambda表达式来代替方法引用

List<Foo> res = foos.stream()             
                    .sorted(Comparator.comparing(fo->fo.getSelect().getFooKey()))
                    .collect(Collectors.toList());

对于排序,您甚至不需要流

foos.sort(Comparator.comparing(fo->fo.getSelect().getFooKey()));
相关问题