M4V*_*V3N 6 java java-8 java-stream
我有一个list1包含不同的字符串,从另一个列表(fooBarList)的字符串开始.
List<String> list1 = Arrays.asList("FOO1234", "FOO1111", "BAR1", "BARRRRR");
List<String> fooBarList = Array.asList("FOO", "BAR");
Run Code Online (Sandbox Code Playgroud)
我想创建一个Hashmap<String, List<String>> hm从list1中分离出来的字符串,具体取决于它们的开头.
结果应如下所示:
{FOO=["FOO1234",FOO1111"], BAR=["BAR1", "BARRRRR"]}
Run Code Online (Sandbox Code Playgroud)
fooBarList定义了不同的键.
如何在溪流的帮助下实现这一目标?我只是不知道如何做我基本上说的步骤:FOO1234从FOO开始,所以检查密钥FOO是否存在并将其添加到列表中,否则创建一个新列表.(我想我必须遍历流中的fooBarList,这对我来说似乎是错的)
/ edit:确保fooBarList中只有2个值我可以做一个简单的检查,如果字符串以"foo"开头,那么就这样做.但是如果我的列表包含100个字符串呢?
Flo*_*own 10
一个简单的Collectors::groupingBy应该做的伎俩:
Map<String, List<String>> prefixGrouping = list1.stream()
.collect(
Collectors.groupingBy(
item -> fooBarList.stream().filter(item::startsWith).findFirst().orElse("")
)
);
Run Code Online (Sandbox Code Playgroud)
输入:
list1=["FOO1234", "FOO1111", "BAR1", "BARRRRR", "LOL"], fooBarList=["FOO", "BAR"]输出:
{""=["LOL"], "BAR"=["BAR1", "BARRRRR"], "FOO"=["FOO1234", "FOO1111"]}
你正在寻找分组函数中的前缀,如果没有前缀匹配,那么它将进入emtpy Stringbin.