【发布时间】:2017-11-06 20:33:16
【问题描述】:
我是 Stream 的新手,但不是很多...这是我的问题:
我有一个正在从 pc 读取的列表,其中我的用户对 exe 文件具有某种 权限...我得到的字符串列表看起来像
List<String> xyzList = new ArrayList<>();
xyzList.add("USER1.READ");
xyzList.add("USER1.WRITE");
xyzList.add("USER1.EXECUTE");
xyzList.add("USER1.DELETE");
xyzList.add("USER2.READ");
xyzList.add("USER3.READ");
xyzList.add("USER2.EXECUTE");
我想要Map<String, String> 喜欢
{USER1 = READ-WRITE-EXECUTE-DELETE, USER2 = READ-WRITE, USER3 = READ}
但我的代码正在生成:
{USER1=USER1.READ-USER1.WRITE-USER1.EXECUTE-USER1.DELETE, USER2=USER2.READ-USER2.EXECUTE, USER3=USER3.READ}
我知道如果我决定继续使用该结果,我可以编辑一组值,但我正在寻找一种更优雅的方式来通过只有一个流指令获得它,我觉得我需要一个自定义收集器...
到目前为止我的尝试..
Map<String, String> result = xyzList
.stream()
.collect(
Collectors.groupingBy(x -> x.split("\\.")[0],
Collectors.joining("-", "", "")
));
System.out.println(result);
有什么建议吗?
【问题讨论】:
-
剥离
mappingCollector中的第一部分。
标签: java java-8 java-stream collectors