我正在学习 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(使用前将#替换为@)