java - 如何根据嵌套对象属性对列表进行排序

标签 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; }

同样的设置方法。

最佳答案

您可以在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()));

关于java - 如何根据嵌套对象属性对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58222952/

相关文章:

java - 无法在 Visual Studio Code 中运行 java 代码

java 8 streams 如何将 Map<String, List<Strings>> 转换为 List<String> 将所有字符串值?

java - 如何使用两个对象中最特殊的类型作为返回类型?

java - try-catch 和 final 变量

java - 如果线程不会自行停止,如何停止它?

java - 如何使用 Stream.flatMap()?

java - spring-boot 记录新线程的运行时异常

java - 使用普通 JAVA Stream 收集 int 数组的值

java - 为什么removeif()在集合流上不可用

java - Peek() 真正地看到元素流过管道中的某个点