【发布时间】:2017-06-02 01:52:54
【问题描述】:
我有一个名为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;
}
但它给了我以下错误
不能抛出布尔类型的异常;异常类型必须是 Throwable 的子类
【问题讨论】:
-
“但它给了我以下错误”你确定吗?该代码没有
throw语句,因此我怀疑您向我们展示的代码可能会产生该错误。 -
另外,更改代码以用于更漂亮但没有时间/空间优势的东西,并没有让我觉得有用
-
这里有一个想法:不要将
DataStream放入您的DataStreams集合中,如果它不会通过您在迭代它时使用的条件。这样你就不需要在退出时应用任何逻辑了。 -
主要问题是即使您的原始代码也无法编译。如果是这样,我们必须得出结论,新代码不可能出现编译器错误。但是,由于旧代码显然不是真正的代码,我们只能得出结论,帮助是不可能的。
-
为什么不直接使用
return DataStreams.stream().allMatch()?
标签: java collections lambda java-8