java - 在没有以前的 Collectors.toMap 的情况下提供 BiConsumer

标签 java java-8 java-stream

我想从 BufferedReader 中读取行,将字符串分成两部分并将它们提供给 BiConsumer。是否可以在不事先将两个拆分字符串收集到 Map 的情况下完成?

例子:

bufferedReader.lines()
    .collect(Collectors.toMap(l -> l.split(",")[0], l -> l.split(",")[1]))
    .forEach(translations1::put);

是否可以通过某种方式删除 Collectors.toMap 来改善这一点?

最佳答案

我会做的是保留 toMap

Map<String, String> map = bufferedReader.lines()
                                        .map(l -> l.split(",", 2))
                                        .collect(Collectors.toMap(a -> a[0], a -> a[1]));

除非有我遗漏的要求,否则 toMap 似乎值得保留。

顺便说一下,如果你想要一个功能性的解决方案,你应该尽量避免 forEach 或任何修改状态的 lambda。它可以在 Java 中工作,但如果你能避免它,我相信你应该这样做。如果没有副作用,函数式编程是最清晰的。

关于java - 在没有以前的 Collectors.toMap 的情况下提供 BiConsumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153465/

相关文章:

java - 如何在 Java 中使用 MapEntry?

java - 在List中输入几行

Java-8:要流式传输的 boolean 原始数组?

java - java中删除字符串二维数组中的所有数据

java - 无法获取格式正确的 json 对象

java - Spring mongodb查询包含嵌套数组的嵌套数组

java - 如何使用 Java 8 库将 UTC DateTime 转换为另一个时区?

java - 如何将 Java 流转换为滑动窗口?

java - 我们如何使用java流迭代多个列表并调用setter方法

java - 是否有 BiConsumer 的反向映射到元组等多个值