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]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |