加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:04:14 所属栏目: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(
是否可以检查数组(或集合)是否包含元素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]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读