2

我希望能够使用 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());

但是 extract 返回一个

List<List<SpaceSystemType>> 

所以我必须使用错误的命令。

哪个 lambdaj 命令可以实现我想要的?

4

2 回答 2

6

我使用flatten解决了这个问题:

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

SpaceSystemType 是 JAXB 生成的类,表示元素的子树。由于 SpaceSystemType.getSpaceSystem() 返回一个列表,因此有必要指示 lambdaj 从树中获取所有叶子。

于 2011-04-04T17:49:21.260 回答
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())));
于 2014-06-27T15:25:00.570 回答