class Ob {
private String type;
private List<String> attire;
// standard getter and setters
public Ob (String type){
this.type=type;
}
public Ob addAttrire(String att){
if(attire == null){
attire = new ArrayList<>();
}
attire.add(att);
return this;
}
}
我接收對象爲
[{
"type" : "upper"
attires : [{"t1","t2"}]
},
{
"type" : "upper"
attires : ["t3","t4"]
},
{
"type" : "lower"
attires : ["l1","l2"]
}]
對象Ob
的名單,我必須爲
[{
"type" : "upper"
attires : ["t1","t2","t3","t4"]
},{
"type" : "lower"
attires : ["l1","l2"]
}]
如何使用流來做到這一點。是否減少幫助? 一個可以使用的流是
List<Ob> coll = new ArrayList<>();
coll.add(new Ob("a").addAttrire("1").addAttrire("2").addAttrire("3"));
coll.add(new Ob("a").addAttrire("1").addAttrire("2").addAttrire("3"));
coll.add(new Ob("a").addAttrire("1").addAttrire("2").addAttrire("3"));
coll.add(new Ob("b").addAttrire("1").addAttrire("2").addAttrire("3"));
coll.add(new Ob("b").addAttrire("1").addAttrire("2").addAttrire("3"));
coll.add(new Ob("b").addAttrire("1").addAttrire("2").addAttrire("3"));
Collection<Ob> values = coll.stream()
.collect(toMap(Ob::getType, Function.identity(), (o1, o2) -> {
o1.getAttire().addAll(o2.getAttire());
return o1;
})).values();
更新與魯的溶液的問題。沒有要求刪除重複項,但可以使用Ob中的set for set裝完成。目前的解決方案完美無缺。
關於魯本斯回答您的評論是合併函數「*什麼在這樣的情況下,性能的影響*推薦的方式」:我認爲在運行時性能沒有太大的區別。如果性能在這裏成爲一個問題,我認爲最好用循環重寫代碼,這會給你更多的控制權。我認爲魯本斯解決方案具有優勢,因爲它更短,更簡單。我認爲我有一個優勢,因爲它不會修改原來的「Ob」,因此更具有功能風格。 – Lii