Как отсортировать список на основе свойств вложенного объекта - PullRequest
0 голосов
/ 03 октября 2019

Я новичок в потоках 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

, и получатели и установщики для этого (один изэто getFoosKey, по которому я сортирую)

Class: Foo
private FooSelect select
private FooInsert insert

Foo(select, insert)

public FooSelect getSelect() {
return select; }

Тот же способ установки.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Удалить map. map изменяет объект в потоке. Обновите отсортированный оператор как

.sorted(Comparator.comparing(f -> f.getSelect().getFoosKey()))
0 голосов
/ 03 октября 2019

Вы можете использовать лямбда-выражение в Comparator.comparing вместо ссылки на метод

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

Для простой сортировки вам даже не нужен поток

foos.sort(Comparator.comparing(fo->fo.getSelect().getFooKey()));
...