我希望能够使用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命令能达到我想要的效果?
答案 0 :(得分:6)
我使用 flatten 解决了这个问题:
List<SpaceSystemType> sources = flatten(extract(subsystems, on(SpaceSystemType.class).getSpaceSystem()));
SpaceSystemType是一个JAXB生成的类,表示元素的子树。由于SpaceSystemType.getSpaceSystem()返回一个List,因此需要指示lambdaj从树中获取所有叶子。
答案 1 :(得分: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())));