java8 用无用的组合器来减少

标签 java java-8 java-stream reduce

我需要将正则表达式列表应用到字符串,所以我想使用java8 map reduce:

List<SimpleEntry<String, String>> list = new ArrayList<>();

list.add(new SimpleEntry<>("\\s*\\bper\\s+.*$", ""));
list.add(new SimpleEntry<>("\\s*\\bda\\s+.*$", ""));
list.add(new SimpleEntry<>("\\s*\\bcon\\s+.*$", ""));

String s = "Tavolo da cucina";

String reduced = list.stream()
    .reduce(s, (v, entry) -> v.replaceAll(entry.getKey(), entry.getValue()) , (c, d) -> c);

实际上这段代码可能不是很漂亮,但是它可以工作。我知道这不能并行,但对我来说没问题。

现在我的问题是:Java8(或更高版本)是否有机会编写更优雅的东西?我的意思是还要避免添加无用的组合器功能。

最佳答案

受到 Oleksandr 的评论和 Holger 的启发,我写了这篇文章

String reduced = list.stream()
.map(entry-> 
    (Function<String, String>) v -> v.replaceAll(entry.getKey(), entry.getValue()))
.reduce(Function.identity(), Function::andThen)
.apply(s);

这也减少了函数组合的所有条目。

关于java8 用无用的组合器来减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639966/

相关文章:

java - 从 Java 8 中的 java.util.stream.Stream 检索列表

java - 连接一组对象,在java中按值分组

java - 将结果查询转换为字符串

java - 如何将 List<Obj1> 转换为 Map<Obj1.prop, List<Obj1.otherProp>

Java GSON 自定义反序列化器版本控制支持

java - .removeIf() 与 .filter().collect()

Java 使用 Collections.reverseOrder() 按值降序排列 TreeMap

java - Java 8 流 lambda 中的共享可变性

java - 当我处于不同的 Activity 时如何从 ImageView 更改图像

java - Java9 的 Maven 站点插件