java – 在一个流中进行多个“匹配”检查

前端之家收集整理的这篇文章主要介绍了java – 在一个流中进行多个“匹配”检查前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以检查数组(或集合)是否包含元素5和除了5之外的元素.在一个流中返回布尔值而不是使用两个流:
int[] ints = new int[]{1,2,3,4,5};

boolean hasFive = IntStream.of(ints).anyMatch(num -> num == 5);
boolean hasNonFive = IntStream.of(ints).anyMatch(num -> num != 5);

boolean result = hasFive && hasNonFive;

解决方法

在这种具体情况下,即要知道流或数组是否包含两个,匹配和非匹配元素(与谓词的否定相匹配的元素),您可以简单得多.

首先,测试第一个元素是否匹配谓词或其否定,然后搜索流是否包含相反的匹配项:

IntPredicate predicate=i -> i==5;

if(ints.length>0 && predicate.test(ints[0]))
    predicate=predicate.negate();
boolean result = IntStream.of(ints).anyMatch(predicate);

而已.如果您没有数组或集合作为流源,但是任意流,测试第一个元素有点棘手:

IntPredicate[] tmp={ null };
Spliterator.OfInt sp=intStream.spliterator();
boolean result = sp.tryAdvance(
    (int i) -> tmp[0]=predicate.test(i)? predicate.negate(): predicate)
 && StreamSupport.intStream(sp,false).anyMatch(tmp[0]);

猜你在找的Java相关文章