我有这样的情况,我想从多个源对象中提取多个值到一个集合中。我试图通过Guava的转换实现这一目标,但遇到了我收回一系列集合的问题,我必须手动“扁平化”。有没有一种很好的方法可以直接在平面集合中获得结果?
private static final Function<Target, Collection<Integer>> EXTRACT_FUNCTION = new Function<SourceObject, Collection<Integer>>() {
@Override
public Collection<Integer> apply(SourceObject o) {
// extract and return a collection of integers from o
return Lists.newArrayList(..);
}
};
Collection<SourceObject> sourceObjects = ...
Collection<Collection<Integer>>> nestedResults = transform(sourceObjects, EXTRACT_FUNCTION);
// Now I have to manually flatten the results by looping and doing addAll over the nestedResults..
// Can this be avoided?
Collection<Integer> results = flattenNestedResults(nestedResults);
答案 0 :(得分:8)
您可以使用Guava的Iterables.concat(Iterable<E>... coll)
对几个可迭代的结果进行分组
答案 1 :(得分:1)
您要问的是reduce
/ fold
方法。尽管有一个未解决的问题,Guava
目前仍然不支持Function
也许最好不要使用{{1}},而是迭代它并添加到一个集合中。番石榴是一个很好的框架,但它不能做任何事情。