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