使用anyMatch和lambdas来验证java中的集合

时间:2017-01-17 20:45:53

标签: java collections lambda java-8

我有一个名为isValidDataStreams的方法,我正在检查我的DataStream集合中的任何成员是否违反isNotEmpty中的检查。

public class MyClass {
    private Collection<DataStream> DataStreams;

    /* checking ManifestTemplate/DataStreams */
    public boolean isValidDataStreams()
    {
        if ( getDataStreams().isEmpty() )
            return false;

        for( DataStream dataStream : DataStreams )
        {
            if ( DataStream == null || 
                 !isNotEmpty(DataStream.getAlias() ) || 
                 !isNotEmpty(DataStream.getFilePath() ) ) {
                return false;
            }
        }
        return true;
    }
}

public class DataStream {
    private String alias;
    private String filePath;
}

我觉得这段代码看起来有些难看。是否可以使用lambdas并使这段代码看起来更好,类似于

List<String> test = Arrays.asList("a", "b", null, "c", "d");

        if (test == null) {
            return;
        }

        if (test.stream().anyMatch( x -> { System.out.println( x ); return x == null; } ) ) 
        {
            System.out.println( "dsaflasdk" );
        }

我试着按如下方式替换它。

public boolean isValidDataStreamsLambda()
    {
        if ( getDataStreams().isEmpty() )
            return false;

        if(dataStreams.stream().anyMatch( x -> {!isNotNullAndEmpty(x.getAlias() ) || 
            !isNotNullAndEmpty(x.getFilePath())} ))
        {
            return false;
        }
        return true;
    }

但它给了我以下错误

  

不能抛出boolean类型的异常;必须是异常类型   Throwable的子类

1 个答案:

答案 0 :(得分:0)

一种方法来检查存储在列表中的所有DataStream对象是否正确设置了它们的值“ alias”和“ filePath”:

  public static boolean isValidDataStreamsLambda(List<DataStream> dataStreamList) {
     return dataStreamList.stream()
        .filter(d-> d != null && d.getAlias() != null && d.getFilePath() != null && !d.getAlias().isEmpty() && !d.getFilePath().isEmpty())
        .count() == dataStreamList.size();
  }