【问题标题】:group multiple elements of a collection when they have one common attribute当集合的多个元素具有一个共同属性时,将它们分组
【发布时间】:2022-01-09 23:21:21
【问题描述】:

我有多个元素的集合, 就像

id: 18    quantity:20
id: 18    quantity:70
id: 21    quantity:50

我如何获取这个收藏并制作它:

id:18    quantity:90
id:21    quantity:50

我正在使用java

【问题讨论】:

    标签: java collections


    【解决方案1】:

    您可能希望将其收集到地图中,如下所示:

    public class Playground {
        public static void main(String... args) {
            List<ArticlePos> articlePos = Arrays.asList(new ArticlePos("18", 20), new ArticlePos("18", 70), new ArticlePos("21", 50));
            Map<String, Integer> collected = articlePos.stream().collect(Collectors.toMap(ArticlePos::getId, ArticlePos::getAmount, Integer::sum));
            collected.entrySet().forEach(System.out::println);
    
        }
        
        private static class ArticlePos {
    
            public ArticlePos(String id, Integer amount) {
                this.id = id;
                this.amount = amount;
            }
            public String id;
            public Integer amount;
    
            public String getId() {
                return id;
            }
            public Integer getAmount() {
                return amount;
            }
        }
    }
    

    由于您没有展示很多代码,因此您当然需要根据自己的情况自行实现。所以这不是一个真正的复制粘贴解决方案。不过,这很简单。

    Collectors.toMap() 需要 KeyMapper-、ValueMapper- 和 Merge-Function。对于 KeyMapper,我只是简单地使用 ID-Getter,对于 Value-Amount-Getter,最终合并金额显然会相互叠加。

    Read function documentation

    【讨论】:

    • 我没有发布任何代码,因为我没有,对不起,这对我有很大帮助,我能够让它工作,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多