使用Java Streams使用过滤器将对象列表转换为字符串列表

时间:2019-07-18 03:30:35

标签: java collections java-8 java-stream

要从“ iEflag”值为“ E”的对象列表中获取所有estd码值。尝试过此方法,但不起作用。

List<String> estdCodeList = applEstdList.stream()
                    .map(StdCode::getEstdCode)
                    .filter(x -> x.getiEflag().equals("E"))
                    .collect(Collectors.toList());

其中applEstdListStdCode类型的对象的列表。

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());
                    }
                }

2 个答案:

答案 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());

应该起作用。