java之使用 Java 8 按属性对自定义对象列表进行分组

tuyile006 阅读:41 2025-02-15 21:57:57 评论:0

我正在学习 lambda 的许多新功能,想知道如何根据某些属性作为键按自定义对象列表进行分组? 例如,我在 json 中有这样的对象列表。

[{ "account" : "checking", "source" : "BOA" }, { "account" : "checking", "source" : "TD" }, { "account" : "saving", "source" : "WS" } ]

我正在寻找使用 java 8 功能进行分组以获得这样的输出的方法(将源分组为同一帐户的逗号分隔。

[{ "account" : "checking", "source" : "BOA, TD" }, { "account" : "saving", "source" : "WS" } ]

谢谢

请您参考如下方法:

这个解决方案怎么样

    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.List; 
    import java.util.stream.Collectors; 
 
    public class Data { 
 
        public static void main(String ab[]) { 
            List<Data> dataList = Arrays.asList(new Data("checking", "BOA"), new Data("checking", "TD") 
                    , new Data("saving", "WS")); 
            List<Data> newList = new ArrayList<>(dataList.stream() 
            .collect(Collectors.toMap(Data::getAccount, d -> d, (d1, d2) -> new Data(d1.account, d1.source + ", " + d2.source))) 
            .values()); 
            System.out.println("dataList = " + dataList); 
            System.out.println("newList = " + newList); 
        } 
 
        private String account; 
        private String source; 
 
        Data(String account, String source) { 
            this.account = account; 
            this.source = source; 
        } 
 
        @Override 
        public String toString() {//just override toString as json object with out using jon passer   
            return "{ \"account\" : \""+account+"\", \"source\" : \""+source+"\" }"; 
        } 
 
        public String getAccount() { 
            return account; 
        } 
 
        public void setAccount(String account) { 
            this.account = account; 
        } 
 
        public String getSource() { 
            return source; 
        } 
 
        public void setSource(String source) { 
            this.source = source; 
        } 
    } 


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号