2011-04-04 29 views
2

我希望能夠使用lambdaj將子列表組合到一個列表中。我如何將使用lambdaj的列表組合在一起?

我有工作的一個迭代版本:

// HDU elements are children of each subsystem 
Collection<SpaceSystemType> subsystems = this.getAllSubsystems(); 
Set<SpaceSystemType> sources = new HashSet<SpaceSystemType>(); 

// Iterate the subsystems, collecting all the sources 
for (SpaceSystemType subsystem : subsystems) 
    sources.addAll(subsystem.getSpaceSystem()); // getSpaceSystem returns a List<SpaceSystemType> 

return sources; 

我希望能夠做到這一點:

extract(subsystems, on(SpaceSystemType.class).getSpaceSystem()); 

但提取物返回

List<List<SpaceSystemType>> 

所以我必須使用錯誤的命令。

哪個lambdaj命令實現了我想要的?

回答

6

我解決了這個使用弄平

List<SpaceSystemType> sources = flatten(extract(subsystems, on(SpaceSystemType.class).getSpaceSystem())); 

SpaceSystemType是表示元素的子樹JAXB生成的類。由於SpaceSystemType.getSpaceSystem()返回一個List,因此有必要指示lambdaj從樹中獲取所有樹葉。

1

我發現@retrodone的答案不那麼容易理解。這裏有另一個例子:

List<String> lista1 = Arrays.asList(new String[]{"1", "2", "3"}); 
List<String> lista2 = Arrays.asList(new String[]{"4", "5", "6"}); 

Bla bla1 = new Bla(lista1); 
Bla bla2 = new Bla(lista2); 

List<Bla> blas = Lists.newArrayList(bla1, bla2); 

System.out.println(flatten(collect(blas , on(Bla.class).getLista()))); 
相關問題