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

标签 java spring lambda java-8 java-stream

我正在学习 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 - 使用 Java 8 按属性对自定义对象列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61924108/

相关文章:

java - Spring Security HTTP 基本认证

java - 在单元测试中比较 ArrayList

c++ - 通过引用接收 lambda 作为参数的正确方法

C++ 不可复制的 lambda 行为可复制?

spring - 使用 RestTemplae 获取 vavr Multimap 后的反序列化错误

java - 如何将以下代码转换为流

java - GWT 抛出错误,表示无法从我的 RequestFactory 接口(interface)中找到方法,但某些方法可以工作

java - 解析 XML,跳过某些标签

java - 如何在Spring上下文中注入(inject)回调类?

java - Java maven spring 框架的 Restful API 不工作