使用Java 8 Stream映射的字符串

时间:2019-07-10 03:57:45

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

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

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 ??

谢谢!

1 个答案:

答案 0 :(得分:4)

是的,您可以在map操作内拆分行,然后collect将其toMap拆分为:

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