【发布时间】:2019-08-23 10:42:15
【问题描述】:
我有一个列表,元素的一个字段以一些相同的字符开头,我想对列表进行分组。
class Foo{
String a;
String b;
...
}
我怎样才能得到结果?
输入
List<Foo> list = Lists.newArrayList();
list.add(new Foo("FM11","1"));
list.add(new Foo("FM1122","2"));
输出
Map<String,List<String>>
{"FM11":["1","2"],"FM1122":["1","2"]}
我想使用正则表达式,如果匹配,将b合并到列表中,键使用a。我该怎么办?
Pattern.matches(a+".*")
【问题讨论】:
-
...stream.collect(Collectors.groupingBy...) -
鉴于您的示例输入,我无法看到应该如何计算输出。您是否只想要与每个
a关联的所有bs 的叉积? -
我想得到一个所有
a都与key相似的map,然后在Foo中得到b,类似a,b -> toList -
如果您只有两个值,请使用 Collectors.partitionBy。否则,groupingBy。
-
substring(0, 4)分组。作为旁注,你知道吗,why you are usingLists.newArrayList()instead ofnew ArrayList<>()?
标签: java lambda java-stream