【发布时间】:2019-11-01 03:34:32
【问题描述】:
这是一个对象调用 Mon。它有两个属性,开始和结束,都是字符串。 结束属性可以包括“;”像这样
Mon m1 = new Mon(); m1.setStart("A"); m1.setEnd("a;b");
Mon m2 = new Mon(); m2.setStart("A"); m2.setEnd("b");
Mon m3 = new Mon(); m3.setStart("C"); m3.setEnd("c");
Mon m4 = new Mon(); m4.setStart("A"); m4.setEnd("c");
这是一个 ArrayList。
List<Mon> list = new ArrayList();
list.add(m1);list.add(m2);list.add(m3);list.add(m4);
现在我想按开始属性和结束属性对列表进行分组,但基于末尾包含“;”,所以我也想将 m1 和 m2 放入同一组,因为 m1.end 包含m2.end,但 m4 在另一组中,因为 m4 的 start 和 end 与 m1,m2 不同。
我尝试使用 Collectors.groupingBy 按开始分组
Map<String, List<Mon>> map = list.stream().collect(Collectors.groupingBy(d -> d.getStart()));
但这不是我想要的结果 输出如下:
key: Aa;b OR Ab , value: m1, m2
key: Cc, value: m3
key: Ac, value: m4
有什么方法可以实现吗,jdk8的流功能也比较好
非常感谢
【问题讨论】:
-
你能解释一下,组是什么意思
-
到目前为止你有什么尝试?
-
@ShaileshChandra 我的意思是按开始属性对列表进行分组,就像这样
Map<String, List<Mon>> map = list.stream().collect(Collectors.groupingBy(d -> d.getStartMsgType())); -
@RavindraRanwala 我尝试使用 Collectors.groupingBy,但我只能对起始属性进行分组,不知道如何检查结束属性,因为它包含“;”
-
为什么需要检查 end 属性。我看不出这样做有什么意义?只是 groupingBy start 给出了预期的结果 afaiu。
标签: java java-8 java-stream