首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用lambdaj组合列表?

如何使用lambdaj组合列表?
EN

Stack Overflow用户
提问于 2011-04-05 00:02:56
回答 2查看 1.8K关注 0票数 2

我希望能够使用lambdaj将子列表合并为一个列表。

我有一个有效的迭代版本:

代码语言:javascript
复制
// 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;

我希望能够做到这一点:

代码语言:javascript
复制
extract(subsystems, on(SpaceSystemType.class).getSpaceSystem());

但是extract返回一个

代码语言:javascript
复制
List<List<SpaceSystemType>> 

所以我一定是用错了命令。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-05 01:49:21

我用flatten解决了这个问题

代码语言:javascript
复制
List<SpaceSystemType> sources = flatten(extract(subsystems, on(SpaceSystemType.class).getSpaceSystem()));

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

票数 6
EN

Stack Overflow用户

发布于 2014-06-27 23:25:01

我发现@retrodone的答案并不那么容易理解。下面是另一个例子:

代码语言:javascript
复制
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())));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5541163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档