【发布时间】:2019-12-03 10:29:39
【问题描述】:
为了清理数据列表,我创建了一个接受数据列表和要执行的清理操作列表的方法。
public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) {
List<T>dataNew=data.stream().map((str) -> {
T cleanData = str;
for(Function<T,T> function:cleanOps) {
cleanData=function.apply(cleanData);
}
return cleanData;
}).collect(Collectors.toList());
return dataNew;
}
这里的问题是我们正在再次创建整个列表,因为Collectors.toList() 返回了一个新列表。
我们可以在不使用额外空间的情况下达到相同的结果吗?
下面是调用代码:
public void processData() {
List<Function<String, String>> cleanOps = new ArrayList<>();
cleanOps.add(String::toLowerCase);
cleanOps.add(str -> str.replaceAll(" ", ""));
List<String> data = new ArrayList<>();
data.add("John Doe");
data.add("Jane Doe");
System.out.println(Arrays.toString(cleanData(data, cleanOps).toArray()));
}
【问题讨论】:
-
toList()返回Collector而不是List,并且不:没有“额外空间”就不能拥有“额外数据”
标签: java java-8 functional-programming java-stream