要从“ iEflag
”值为“ E”的对象列表中获取所有estd码值。尝试过此方法,但不起作用。
List<String> estdCodeList = applEstdList.stream()
.map(StdCode::getEstdCode)
.filter(x -> x.getiEflag().equals("E"))
.collect(Collectors.toList());
其中applEstdList
是StdCode
类型的对象的列表。
public class StdCode implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String applnCode;
private String estdCode;
private String iEflag;
}
我尝试使用Java Streams转换此代码。在这里使用Stream是否有任何性能优势?
List<String> iEflagIsE = new ArrayList<String>();
List<String> iEflagIsNotE = new ArrayList<String>();
//Creating the respective exclusion inclusion list
for(ApplicationEstCode applnList :applEstList){
if(applnList.getiEflag().equals("E")){
iEflagIsE.add(applnList.getEstCode());
}else{
iEflagIsNotE.add(applnList.getEstCode());
}
}
答案 0 :(得分:0)
您可能因为以下原因而错过了另一次map
ping操作
List<String> stdCodeList = applEstdList.stream()
.map(StdCode::getStdCode)
.map(a -> a.getiEflag())
.filter(x -> x.equals("E"))
.collect(Collectors.toList());
或将map
操作组合为:
List<String> stdCodeList = applEstdList.stream()
.map(applEstd -> applEstd.getStdCode().getiEflag())
.filter(iEflag -> iEflag.equals("E"))
.collect(Collectors.toList());
答案 1 :(得分:0)
问题是这一行:
.map(StdCode :: getEstdCode)
将您的源StdCode
类型集合转换为estdCode字符串集合,然后将此输出传递到下一个filter
方法。我认为它应该抱怨一个错误,因为该方法不存在,因为您正在向它提供没有getiEflag())方法的String对象的集合。
如果更改这两种方法的顺序:
List<String> estdCodeList = applEstdList.stream()
.filter(x -> x.getiEflag().equals("E"))
.map(StdCode::getEstdCode)
.collect(Collectors.toList());
应该起作用。