栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过谓词限制流

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过谓词限制流

这样的操作在Java 8中应该是可能的

Stream
,但不一定能有效地完成-例如,您不必并行化这样的操作,因为您必须按顺序查看元素。

该API并没有提供一种简便的方法,但是最简单的方法可能是采用

Stream.iterator()
,将其包装Iterator为具有“
take-while
”的实现,然后返回到
Spliterator
然后是a Stream。或者-也许-包装
Spliterator
,尽管在此实现中它实际上不能再拆分了。

下面是一个未经测试的执行

takeWhile上Spliterator

static <T> Spliterator<T> takeWhile(    Spliterator<T> splitr, Predicate<? super T> predicate) {  return new Spliterators.AbstractSpliterator<T>(splitr.estimateSize(), 0) {    boolean stillGoing = true;    @Override public boolean tryAdvance(Consumer<? super T> consumer) {      if (stillGoing) {        boolean hadNext = splitr.tryAdvance(elem -> {          if (predicate.test(elem)) { consumer.accept(elem);          } else { stillGoing = false;          }        });        return hadNext && stillGoing;      }      return false;    }  };}static <T> Stream<T> takeWhile(Stream<T> stream, Predicate<? super T> predicate) {   return StreamSupport.stream(takeWhile(stream.spliterator(), predicate), false);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号