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

2024-03-01

我正在学习 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" } ]

Thanks


这个解决方案怎么样

    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;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 8 按属性对自定义对象列表进行分组 的相关文章

随机推荐

  • 如何使用 MVVM 和 MVVM 工具包将属性绑定到文本框?

    我是 MVVM 新手 为了学习 我创建了一个示例应用程序 以便在单击按钮时在文本框中显示消息 在我的代码中 按钮命令工作正常 但该属性未绑定到文本框 如何使用 MVVM 将属性绑定到文本框 我的代码类似于下面给出的 View
  • ASP.NET vNext - 本地化 (.resx)

    如何使用 resx 文件通过 ASP NET vNext 云优化模式 进行本地化以及如何为当前线程设置区域性 System Threading Thread CurrentThread CurrentCulture System Threa
  • 为什么这个函数将RAX压入堆栈作为第一个操作?

    在下面的 C 源代码汇编中 为什么RAX被压入堆栈 据我从 ABI 的了解 RAX 可以包含调用函数中的任何内容 但我们将其保存在这里 然后将堆栈向后移动 8 个字节 所以我认为堆栈上的 RAX 只与std throw bad functi
  • 如何解决“允许的内存大小已耗尽”错误?

    我正在使用 phpspreadsheet 我想修改一个包含 4 张纸的 xlsx 文件 我只想在 2 张表中插入数据 但我想将所有 4 张表复制到新的 xlsx 文件中 当我这样做时 我收到此错误 致命错误 允许的内存大小 53687091
  • 是否有高级 Ag-Grid 事件来侦听列状态的任何更改?

    我将 Ag Grid 与 Angular 一起使用 我想听听any修改列状态的事件 截至目前 我必须列出所有事件 columnVisible onCol event columnMoved onCol event etc 是否有我可以依赖的
  • 在 python 中查询返回本地范围的对象

    下面是返回的程序function函数中定义的类型对象f其堆栈帧 f1 在程序退出之前仍然存在 下面是返回的程序int类型对象 值为1024 但返回后栈帧不存在int类型对象 根据上面两个图 为什么返回类型机制存在这种差异 当您返回时 框架不
  • 如何使用 XSLT 合并两个 xml 文件

    我有两个 xml 文件 需要使用 XSLT 将它们合并为一个 第一个 XML 是 原始 XML
  • 如何计算php中2个unix时间戳之间的间隔而不除以86400(60 * 60 * 24)

    我有 2 个 unix 时间戳 我位于亚太地区 奥克兰时区 GMT 12 夏令时 GMT 13 我想计算两个时间戳之间的天数间隔 其中一个在夏令时内 一个不在夏令时内 我的示例日期是 7 Feb 2009 1233925200 to 21
  • 什么是 Git?我为什么需要它?

    我对编程还很陌生 但我觉得我已经掌握了它的窍门 并且我正在尽力学习 我一直读到 Git 对于编程项目来说绝对至关重要 但我似乎无法弄清楚它实际上是什么does 谷歌也不想告诉我 该网站称其为 分布式版本控制系统 呃 嗯 有人可以向新手解释一
  • 后台工作者 while 循环

    我想要创建的是一个后台工作者 每 30 秒执行几个进程 但我希望只要程序启动就执行这个 while 循环 这是我正在使用的 private void watcherprocess1 backgroundWorker1 RunWorkerAs
  • python 中的 crontab

    我正在用 python 为某种守护进程编写代码 该守护进程必须在由 crontab 字符串定义的特定时间实例执行特定操作 有我可以使用的模块吗 如果没有 有人可以粘贴 链接一个算法 我可以用它来检查 crontab 定义的时间实例是否在上次
  • 相对于 DBUnit 数据集中当前的日期

    我想知道是否有任何方法可以指定例如明天作为 DBUnit XML 数据集中的日期 有时 未来日期和过去日期的代码逻辑是不同的 我想测试这两种情况 当然 我可以指定 2239 年 11 月 5 日之类的日期 并确保测试在此日期之前有效 但是否
  • 当遵守里氏替换原则(LSP)时,子类可以实现额外的接口吗?

    考虑这个红宝石示例 class Animal def walk In our universe all animals walk even whales puts walking end def run Implementing to co
  • 从 mysql 查询创建数组。 Column2 作为键 Column 1 作为值

    我有一张表 其中包含 column 1 state column 2 link Alabama auburn alabama com Alabama bham alabama com Alabama dothan alabama com 我
  • 如何发送带有查询字符串作为查询字符串的 URL

    我正在执行从一个页面到另一个页面的重定向 以及从第二页面到第三页面的另一个重定向 我有来自第一页的信息 该信息未在第二页上使用 但必须转移到第三页 是否可以将第三页的 URL 及其查询字符串作为查询字符串发送到第二页 这是一个例子 Resp
  • Android 进度条未更新

    我在更新进度条时遇到问题 我正在单独的线程中更新进度条 并在另一个线程中更新进度条进度所依赖的变量 这是一个类变量 因此 进度对话框显示但始终为 0 不更新进度 请帮帮我 public void setProgressbar progres
  • 何时在模块方法中使用 self

    我的模块定义如下所示 module RG Stats def self sum a args a inject 0 accum i accum i end end 要使用此方法 我只需要包含此定义的文件 以便我可以执行以下操作 RG Sta
  • 从 CMake 文件执行 bash 命令

    我无法理解 CMake 我想要做的是在构建过程中执行以下 bash 命令 date F T gt timestamp 这会获取当前日期并将其写入文件 但是 我似乎无法使用 CMake 命令重现这个简单的操作 以下是我尝试过的一些事情 exe
  • 为什么默认参数后面允许有参数包?

    也许我遗漏了一些明显的东西 但是以下编译并运行 我不确定为什么 我知道this https stackoverflow com questions 27303283 clang vs gcc variadic template parame
  • 使用 Java 8 按属性对自定义对象列表进行分组

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