【问题标题】:String to Map using java 8 Stream [duplicate]使用java 8 Stream映射的字符串[重复]
【发布时间】:2019-07-10 03:57:45
【问题描述】:

我有一个包含格式行的文件:

banana::yellow
orange::orange
apple::red
garlic::white

我想将文件读入地图,其中key:: 的左侧,值是:: 的右侧

我这样做是为了实现它:

try (Stream<String> stream = Files.lines(Paths.get(myFilePath))) {
        List<String> myList = stream.collect(Collectors.toList());
        Map<String, String> myMap = new HashMap<>();
        for (String line : myList) {
            String[] pair = line.split("::");
            myMap.put(pair[0], pair[1]);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

但是,这是否可以进一步简化,以便流直接生成我想要的地图?

Map<String, String> myMap = stream.somethinghere ??

谢谢!

【问题讨论】:

    标签: java file dictionary java-8 java-stream


    【解决方案1】:

    是的,您可以在 map 操作中拆分行,然后将 collecttoMap 拆分为:

    Map<String, String> myMap = stream
            .map(line -> line.split("::"))
            .collect(Collectors.toMap(pair -> pair[0], pair -> pair[1], (a, b) -> b));
    

    【讨论】:

    • 最后 (a,b) -> b 的目的是什么?因为解决方案也可以在没有它的情况下工作..
    • @Vicky 只是一个mergeFunction,如果收集时有多个相等的keys,它会定义选择哪个value。截至目前 ((a,b)-&gt;b),为任何此类重复出现的键覆盖现有值。只需尝试将 garlic::dislike 添加到您的输入列表中即可查看它是否正常工作。
    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2017-02-18
    • 2021-03-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多