Java 8流到Map <k,list <string>

时间:2016-12-03 18:22:05

标签: java java-stream

我正在尝试使用Java 8 Streams来读取文件并通过应用特定规则添加行来映射。我的文件是这样的:

  

2
54 4 13 167 5 7
23 96 24 3

第一行显示我希望放入地图的大小和其他行。我做到了这一点,但问题是数字可变的数量。如何获得除第一个元素

之外的所有Stream []元素
Map<Integer, String> kvs = stream
                .skip(1)
                .map(elem -> elem.split(" "))
                .collect(Collectors.toMap(e -> Integer.parseInt(e[0]),
                 e -> e[1]+" "+e[2]));

1 个答案:

答案 0 :(得分:2)

如果您只想将第一个空格后的所有内容用作地图值,则可以使用双参数split

Map<Integer, String> kvs = stream
            .skip(1)
            .map(elem -> elem.split(" ", 2))
            .collect(Collectors.toMap(e -> Integer.parseInt(e[0]), e -> e[1]));

参数2指示拆分不要生成两个以上的字段,因此即使字符串有更多空格,字符串的其余部分也会放入e[1]