Java 如何使用jdk8对ArrayList

Java 如何使用jdk8对ArrayList,java,java-8,java-stream,Java,Java 8,Java Stream,这里有一个对象调用Mon。它有两个属性,start和end,都是字符串。 终端属性可以包括:;像这样 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"

这里有一个对象调用Mon。它有两个属性,start和end,都是字符串。 终端属性可以包括:;像这样

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");
这是一个数组列表

List<Mon> list = new ArrayList();
list.add(m1);list.add(m2);list.add(m3);list.add(m4);
是实现它的任何方法,jdk8流函数也更好


非常感谢

以下内容将为您提供预期结果

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");

List<Mon> list = new ArrayList();
list.add(m1);list.add(m2);list.add(m3);

Function<Mon, String> compositeKey = mon -> mon.getStart()+mon.getEnd();

Map<String, List<Mon>> resultMap = list.stream().collect(Collectors.groupingBy(compositeKey,Collectors.toList()));


祝您好运,但坦率地说,这是一个weired实现,您希望在映射键中应用匹配的字符。不确定你想用它实现什么目标。

你能解释一下,你所说的组是什么意思吗?到目前为止你做了什么?@ShaileshChandra我的意思是按开始属性对列表进行分组,就像这个Map=list.stream.collectors.groupingByd->d.getStartMsgType@RavindraRanwala我尝试使用Collectors.groupingBy,但我只能对开始属性进行分组,不知道如何检查结束属性,因为它包含;为什么需要检查end属性。我看不出这样做有什么意义?只需按开始分组即可获得所需的afaiu结果。我更新了上面的问题和输出,您能提供建议吗?亲爱的,我无法理解您输入和输出的分组模式。是否要通过连接getStart和getEnd来生成密钥?Id是的,为什么我们没有Ab键的条目?此外,您的查询语句仍然表示您只想按getStart进行分组,但预期的输出不支持它。你能解决你的问题吗请更新上面的问题和输出,你能建议吗?如果我们想要Ab键,我们怎么做?为更新的查询更改它。检查它是否有效。还没有测试。StringUtils来自哪个软件包?
key: Aa;b OR Ab , value: m1, m2
key: Cc, value: m3
key: Ac, value: m4
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");

List<Mon> list = new ArrayList();
list.add(m1);list.add(m2);list.add(m3);

Function<Mon, String> compositeKey = mon -> mon.getStart()+mon.getEnd();

Map<String, List<Mon>> resultMap = list.stream().collect(Collectors.groupingBy(compositeKey,Collectors.toList()));

final Map<String, List<Mon>> resultMap = new HashMap();
list.stream().forEach(mon -> {
     resultMap.put(mon.getStart()+getEnd(), ....);
});