![](/img/trans.png)
[英]Copy not null and not empty fields from one object to another object of the same type(Objects are same type) in java
[英]How to collect X type objects from a stream, that contain only some fields of the same X type object, without using an auxiliary collection
一個例子:
這允許提取一個字段
Collection<X> base=...;
List<?> c=base.stream().map(->i.getField()).distinct.collect(Collectors.toList()));
這需要輔助收集
Collection<X> fromBase; //empty collection
Collection<X> base=...;
List<?> c=base.stream().forEach(i->{
X k=...; //create object X with some fields
fromBase.add(k);
});
有沒有一種方法可以直接提取更多字段,例如.map()?
基本示例:
List<X> lst;
private void collectDistinctItems(){
lst = new ArrayList<>();
getSomeItems().stream().forEach(i->{ //Collection<X>
X tmp=new X();
tmp.setField1(i.getField1()); //copy some fields
tmp.setField2(i.getField2());
tmp.setField3(i.getField3());
...
if(!lst.contains(tmp)) lst.add(tmp); //add new X item to X type list
});
}
第一步是使用收集器:
lst = getSomeItems().stream().map(i->{ //Collection<X>
X tmp=new X();
tmp.setField1(i.getField1()); //copy some fields
tmp.setField2(i.getField2());
tmp.setField3(i.getField3());
return tmp; })
.distinct()
.collect(toList());
您還可以將副本提取到單獨的方法中:
private static X copy(X original) {
X tmp=new X();
tmp.setField1(i.getField1()); //copy some fields
tmp.setField2(i.getField2());
tmp.setField3(i.getField3());
return tmp;
}
並使用方法參考:
lst = getSomeItems().stream()
.map(MyClass::copy)
.distinct()
.collect(toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.