我有一个List例子,我想调用它们的函数并列出返回的答案
final List<String> sources = new ArrayList<>();
// initialize
final List<Integer> answers = new ArrayList<>();
for(final String source : sources)
answers.add(calculate(source));
GoogleGuava
或ApacheCommons
中是否有任何标准功能可以使用它代替这些杂乱的代码
喜欢(示例目的):
final List<String> answers = Lists.calculate(sources, new CalculateListener(..));
为了便于理解:JavaScript中的UnderscoreJs
有一个方法map
我希望在java GoogleGuava
或ApacheCommons
中存在类似的内容
答案 0 :(得分:3)
您可以使用Function
界面和Iterables
类进行游戏。
从我的示例中可以看出,您正在尝试转换 源到计算的源,因此代码看起来像是:
Function<String, String> transformer = new Function<String, String>() {
public String apply(String source) {
return calculate(source);
}
};
Iterable<String> calculatedSources = Iterables.transform(sources, transformer);
List<String> calculatedSourcesAsAList = Lists.newArrayList(calculatedSources);
作为旁注,Java8的Stream功能非常清楚地介绍了这种常见的操作类型,您必须将映射源到计算的源,然后收集结果。而且它只是一个单行:
sources.stream().map(source -> calculate(source)).collect(Collectors.toList());