考慮下面的例子,我想這對列表進行排序,並嵌套列表的Java 8流 - 排序嵌套列表層次
class Foo {
public int sort;
public List<Bar> bars;
public Foo(int sort) {
this.sort = sort;
}
}
class Bar {
public int sort;
public Bar(int sort) {
this.sort = sort;
}
}
@Test
public void testSortering() {
Foo foo = new Foo(1);
Foo foo2 = new Foo(2);
Bar bar = new Bar(1);
Bar bar2 = new Bar(2);
foo.bars = Arrays.asList(bar2, bar);
foo2.bars = Arrays.asList(bar2, bar);
List<Foo> foos = Arrays.asList(foo2, foo);
//I would like to iterate foos and return a new foos sorted, and with bars sorted, so that this goes green
assertEquals(1, foos.get(0).sort);
assertEquals(1, foos.get(0).bars.get(0).sort);
assertEquals(2, foos.get(0).bars.get(1).sort);
assertEquals(2, foos.get(1).sort);
assertEquals(1, foos.get(1).bars.get(0).sort);
assertEquals(2, foos.get(1).bars.get(1).sort);
}
我已經試過這樣的流函數:
List<List<Bar>> foosSorted = foos.stream()
.sorted((o1, o2) -> Integer.compare(o1.sort, o2.sort))
.map(f -> f.bars.stream().sorted((o1, o2) -> Integer.compare(o1.sort, o2.sort)).collect(Collectors.toList()))
.collect(Collectors.toList());
但這會返回Bar,而我想要一個Foo列表
你想它修改現有的'Foo'對象(那會不會是非常實用...),或創建新的'Foo'與對象「Bar」對象的排序列表? –
你應該首先想想你真正想做什麼。對就地包含在'Foo.bars'中的列表進行排序或創建'Foo'的新實例。在前一種情況下,只需在這些列表中調用'List.sort'。在後一種情況下,你必須在你的'map'操作中構建新的'Foo'實例。 – Holger
我想要一個新的列表與排序的foos和排序的酒吧 –