我是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; }
相同的设置方法。
答案 0 :(得分:1)
删除map
。 map
更改流中的对象。将排序后的语句更新为
.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()));