
Stream Collectors
zifan0724
这个作者很懒,什么都没留下…
展开
-
Stream.toArray
Object[]toArray()A[]toArray(IntFunctiongenerator)简单地说这个方法就是把流转为数组。要把流转为集合可以使用collect方法,把流转为数组就用toArray方法。无参方法返回的时候一个Object对象数组,有参数的方法返回数组数据类型根据该方法参数函数定义的数据类型来确定。Generator函数用来生成一个数组数据类型。看例子:void stream_toArray() { Object[] oba...原创 2021-06-25 15:45:20 · 6514 阅读 · 1 评论 -
Stream.sorted
Stream<T>sorted()Stream<T>sorted(Comparator<? superT>comparator)对流中元素进行排序,排序后的元素放到新流中返回。无参的方法按照自然顺序排序,有参数的方法根据自定义的比较器进行比较排序。这两个方法都是有状态的中间操作,对于有序流排序结果是固定的,对于无序流则无法保证得到固定的排序结果。看例子:void stream_sorted() { List<...原创 2021-06-25 15:42:46 · 1604 阅读 · 0 评论 -
Stream.skip
Stream<T>skip(longn)返回一个新的stream,该stream包含原stream中跳过前n个元素后的所有元素。如果原stream中的元素数量小于n则返回一个空的stream。和limit方法的区别,skip是指新流包含跳过原流中前n个元素后的全部元素,这是个有状态的中间操作,必须要处理整个输入元素才能产生最终结果,而limit是指取原流中前n个元素放进新流中返回,这是个短路的中间操作,无须处理完全部输入操作即可终止操作获得最终返回结果。比如limit用在处理无限...原创 2021-06-25 15:40:44 · 4290 阅读 · 0 评论 -
Stream.reduce
Optional<T>reduce(BinaryOperator<T>accumulator)Treduce(Tidentity,BinaryOperator<T>accumulator)<U>Ureduce(Uidentity,BiFunction<U,? superT,U>accumulator,BinaryOperator<U>combiner)这又是一个用途很广泛...原创 2021-06-22 10:43:41 · 2743 阅读 · 0 评论 -
Stream.peek
Stream<T>peek(Consumer<? superT>action)生成一个新的流,该流中的元素由当前流的元素组成,新流中每个元素都绑定一个操作,当新流中的元素被使用或被消费的时候该操作被触发执行。看一个例子:void stream_peek() { Stream.of("Mr.zhangsan","Mr.lisi","Mr.wanger","Mr.mazi") .filter(a -> a.length()...原创 2021-06-22 10:39:20 · 1218 阅读 · 0 评论 -
Stream.ofNullable
static<T>Stream<T>ofNullable(Tt)在上面of方法中,如果单个参数为null的话那新生成的流中就会包含一个null的元素,如果这种情况下我们不想在流中包含一个null元素,我就想一个元素都没有,整个流是empty的。那要怎么办,这个时候就可以用到ofNullable这个方法了。看例子:void stream_ofNullable() { String str = null; Stream<St...原创 2021-06-22 10:35:50 · 1065 阅读 · 0 评论 -
Stream.of
static<T>Stream<T>of(Tt)@SafeVarargsstatic<T>Stream<T>of(T...values)静态方法,根据重载了两个方法。作用就是把参数当作流的元素生成新的流。要创建一个包含一个元素T的流,正常情况下我们可以把元素T放到集合当中,然后再使用集合的stream方法创建流并把集合中的元素放到流当中。这种方式创建包含元素的流就要先创建一个包含元素的集合,然后再根据集合在创建流,中...原创 2021-06-22 10:34:20 · 916 阅读 · 0 评论 -
Stream.noneMatch
booleannoneMatch(Predicate<? superT>predicate)这个方法的参数是个判断函数,流中不包含有满足这个判断的元素或者流中元素为空的时候方法返回true,否则返回false。要理解这个方法的作用和使用方法最好的方式就是例子:void stream_noneMatch() { List<String> list = List.of("Mr.zhangsan","Mr.lisi","Mr.wanger","Mr...原创 2021-06-22 10:31:33 · 14349 阅读 · 0 评论 -
Stream.min
Optional<T>min(Comparator<? superT>comparator)这个方法和上面max方法的作用和使用方式一样。唯一区别就是对比较结果的判断和max相反。还有就是对比较结果强制为0的时候和-1是一样的效果。看代码:void stream_min() { List<String> list = List.of("Mr.zhangsan","Mr.lisi","Mr.wanger","Mr.mazi"); ...原创 2021-06-22 10:15:05 · 3932 阅读 · 0 评论 -
Stream.max
Optional<T>max(Comparator<? superT>comparator)这个方法看字面上的意思就是取流中最大的元素返回。但是这个最大不是通常意义上简单数据比较的那个最大,而是通过自定义的比较函数得到的计算结果。看例子:void stream_max() { List<String> list = List.of("Mr.zhangsan","Mr.lisi","Mr.wanger","Mr.mazi"); ...原创 2021-06-22 10:11:05 · 15530 阅读 · 0 评论 -
Stream - mapToInt、mapToLong、mapToDouble
IntStreammapToInt(ToIntFunction<? superT>mapper)LongStreammapToLong(ToLongFunction<? superT>mapper)DoubleStreammapToDouble(ToDoubleFunction<? superT>mapper)这三个方法除了对应返回三种指定类型的stream外其他使用方法和作用和map类似,相当于map方法的特例。现在就...原创 2021-06-22 10:07:20 · 8711 阅读 · 0 评论 -
Stream.map
<R>Stream<R>map(Function<? superT,? extends R>mapper)这个方法比较常用,功能也很强大,作用就是对流中元素使用自定义的mapper函数进行计算,计算结果保存在新流中返回。举个例子,比如我们有集合保存有4个名字,现在我想在这个4个名字的前面都加上“Mr.”,看代码:void steam_map() { List<String> list = List.of("zhan...原创 2021-06-22 10:04:31 · 4697 阅读 · 2 评论 -
Stream.limit
Stream<T>limit(longmaxSize)其作用就是从流中截取maxSize个元素放到新流中返回。如果流中元素数量小于maxSize,那就取实际数量的元素放到新流中返回。看个例子:void stream_limit() { List<Integer> list = List.of(1,2,3,4,5); System.out.println("--截取前三个元素--"); list.stream(...原创 2021-06-22 10:00:56 · 3268 阅读 · 0 评论 -
Stream.iterate
static<T>Stream<T>iterate(Tseed,UnaryOperator<T>f)static<T>Stream<T>iterate(Tseed,Predicate<? super T>hasNext,UnaryOperator<T>next)这个方法和generate方法作用类似,都可以用来生成一个包含无限个元素的流。只不过这个方法比generate方法在使用上...原创 2021-06-21 13:45:55 · 8162 阅读 · 0 评论 -
Stream.generate
static<T>Stream<T>generate(Supplier<? extends T>s)该方法主要用于生成一个无限连续的无序流,流中的元素由用户定义的supplier函数生成。看个简单例子:运行结果:aa该方法一般配合limit方法使用,在这个例子中我们使用limit方法限制这个无限流的长度为2,因此最终打印出两个a。加入我们不使用limit方法限制流长度会出现什么情况?测试一下。Stream<String> ...原创 2021-06-21 13:42:14 · 3386 阅读 · 0 评论 -
Stream - forEach、forEachOrdered
voidforEach(Consumer<? superT>action)voidforEachOrdered(Consumer<? superT>action)这两个方法功能类似,使用方法一致,区别就在于并行处理的时候forEachOrdered是严格按照流中元素顺序执行,而forEach是无序的因此效率高一点。这里就那forEach为例进行说明;forEach方法作用就是遍历流中元素对元素执行参数函数,这个方法对于集合中是java基本数据类型的...原创 2021-06-21 13:29:46 · 658 阅读 · 0 评论 -
Stream - flatMapToInt、flatMapToLong、flatMapToDouble
IntStreamflatMapToInt(Function<? superT,? extendsIntStream>mapper)LongStreamflatMapToLong(Function<? superT,? extendsLongStream>mapper)DoubleStreamflatMapToDouble(Function<? superT,? extendsDoubleStream>mapper)这...原创 2021-06-21 11:41:35 · 1040 阅读 · 0 评论 -
Stream.flatMap
<R>Stream<R>flatMap(Function<? superT,? extendsStream<? extends R>>mapper)这个方法在使用的时候需要注意的一点就是其返回值是一个stream。这个方法的应用场景基本上就是对集合中存放集合这类数据进行处理。例如,有一个集合其中存放的数据是String类型数据的集合:List<List<String>>(List<String>,…)...原创 2021-06-21 11:38:54 · 1010 阅读 · 0 评论 -
Stream.findFirst
Optional<T>findFirst()从流中取第一个元素。不论是串行流还是并行流返回的都是流中第一个元素。看例子:void stream_findFirst() { List<String> list = Arrays.asList("a","b","c","d","e","f","g"); Optional<String> opt = list.stream().findFirst(); Syste...原创 2021-06-21 11:34:52 · 10896 阅读 · 0 评论 -
Stream.findAny
Optional<T>findAny()其作用就是从Stream中取任意一个元素,正常情况下一般会取第一个元素,在并行流的情况下会随机取一个元素。下面看一个例子:void stream_findAny() { List<String> list = Arrays.asList("a","b","c","d","e","f","g"); Optional<String> opt = list.stream().findAn...原创 2021-06-21 11:31:12 · 7350 阅读 · 1 评论 -
Stream.filter
Stream<T>filter(Predicate<? superT>predicate)返回一个新的Stream,该Stream中的元素由满足函参计算结果的集合元素组成。Filter,过滤器的意思。把集合中的元素逐个放进函参中计算,计算结果为true就保留,false就丢弃。看个例子:void stream_filter() { List<Integer> list = List.of(2,5,8,9,4,20,11,43,5...原创 2021-06-21 11:29:16 · 1274 阅读 · 0 评论 -
Stream.empty
static<T>Stream<T>empty()这个方法的作用就是创建一个空的有序Stream。看例子:void stream_empty() { Stream<String> stream = Stream.empty(); stream.forEach(System.out::print); }执行结果什么也没有输出,因为这是一个空的steam。下面例子我们往这个空的Stream中添加几个元素:v...原创 2021-06-21 11:27:30 · 614 阅读 · 0 评论 -
Stream.dropWhile
defaultStream<T>dropWhile(Predicate<? superT>predicate)先不讨论其作用,先看看这个方法怎么用,主要是参数predicate,这是个断言,什么意思?就是对错,真假,符合或不符合等等,这个函参返回值必须为布尔值,true表示满足条件,false表示不满足条件。好,现在看看这个方法怎么使用,看个例子:void stream_dropWhile() { List<String> list ...原创 2021-06-18 15:34:13 · 576 阅读 · 0 评论 -
Stream.count
longcount()功能就是计算Stream中元素的数量。看例子:执行结果:777上面代码中例子1是count方法示例,例子2、3是官方文档上的示例,其作用都是一样。mapToLong和peek方法的作用和使用方法在文档后面再描述。我们关注一下这行代码:long co3 = list.stream().peek(System.out::print).count();运行结果是7,没有打印流中元素。为什么呢?原来count方法对已知元素数量的原流不会执行...原创 2021-06-18 12:00:21 · 1486 阅读 · 0 评论 -
Stream.distinct
Stream<T>distinct()根据该方法的字面意思就可以理解取原Stream中不重复的元素组成一个新的Stream。对原Stream中重复的数据处理规则就是取第一个出现的,后面重复的忽略。看例子:void stream_distinct() { Stream<String> stream1 = Stream.of("I","love","you","and","you","love","me"); Stream<Strin...原创 2021-06-18 11:07:15 · 2327 阅读 · 0 评论 -
Stream.concat
static<T>Stream<T>concat(Stream<? extends T>a,Stream<? extends T>b)作用就是把第二个Stream连接到第一个Stream生成一个新的Stream,看例子:void stream_concat() { Stream<String> stream1 = Stream.of("I","love","you"); Stream<...原创 2021-06-18 10:53:17 · 2301 阅读 · 0 评论 -
Stream.collect
<R>Rcollect(Supplier<R>supplier,BiConsumer<R,? superT>accumulator,BiConsumer<R,R>combiner)Collect,收集采集的意思。就是把流(stream)中的结果数据保存到集合或数组中去。看例子:这里遇到一个问题,当使用String类型参数的时候无法正确执行,代码如下:String str = stream1.collect(S...原创 2021-06-18 10:51:08 · 211 阅读 · 0 评论 -
Stream.builder
static<T>Stream.Builder<T>builder()该方法的作用就是创建一个Stream构建器,创建后就可以使用其build方法构建一个Stream。大多数情况下我们都是使用集合的stram方法创建一个Stream,例如:List.of(“I”,”love”,”you”).Stream()或者是使用Stream的of方法创建Stream,例如:Stream.of("I","love","you");看下面完整的例子:void st...原创 2021-06-18 10:36:28 · 861 阅读 · 0 评论 -
Stream.anyMatch
booleananyMatch(Predicate<? superT>predicate)很容易理解,即是有一个或一个以上的元素满足函数参数计算结果为true那整个方法返回值为true。看例子:void stream_anyMatch() { List<Integer> list = List.of(2,5,8,9,4,20,11,43,55); boolean bo = list.stream().anyMatch(a -&...原创 2021-06-17 15:43:50 · 19158 阅读 · 0 评论 -
stream.allMatch
booleanallMatch(Predicate<? superT>predicate)字面意思就是全部匹配。作用就是定义一个函数参数对集合中全部元素进行计算,如果返回结果都是true那最终结果为true(还有一种情况就是集合元素为空也返回true),如果有一个或多个元素计算结果为false那最终结果为false。这个方法是一个短路的中间操作,既然是短路操作,那就不需要执行完流中全部元素,只要达到要求就中断操作。看一个例子:void stream_allMatch() {...原创 2021-06-17 15:18:28 · 9070 阅读 · 0 评论 -
Stream Collectors - toUnmodifiableList、toUnmodifiableSet
public static <T> Collector<T,?,List<T>> toUnmodifiableList()public static <T> Collector<T,?,Set<T>> toUnmodifiableSet()根据字面上的意思就是返回的ArrayList或HashSet结果是不可更改的。以上两个方法以toUnmodifiableList为例进行说明,看例子:void test44() {原创 2021-05-31 10:29:19 · 994 阅读 · 1 评论 -
Stream Collectors - toConcurrentMap
和toMap方法一样,也根据参数的不同重载了3个方法,作用也和toMap一样,只不过操作的数据类型是ConcurrentMap,返回结果toMap是HashMap,ConcurrentMap返回的是ConcurrentHashMap,这个执行效率差一点但是是线程安全,因此在多线程下使用的。...原创 2021-05-31 10:26:47 · 1872 阅读 · 1 评论 -
Stream Collectors - toList、toSet
public static <T> Collector<T,?,List<T>> toList()public static <T> Collector<T,?,Set<T>> toSet()上面说完了toCollection这里接着说一下toLIst和toSet这两个方法。其实这两个方法的作用toCollection都能实现,但是单独拿出来估计是这两方法比较常用所以为了使用方便就单独定义了这两个方法。还有toMap也一原创 2021-05-31 10:25:47 · 720 阅读 · 0 评论 -
Stream Collectors - toCollection
public static <T,C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)简述一下就是把集合中的元素转换成参数指定的集合类型进行保存。看个例子:void test42() { List<Integer> list = List.of(2,5,8,9,4,20,11,43,55);...原创 2021-05-31 10:24:19 · 2878 阅读 · 0 评论 -
Stream Collectors - summingInt
public static <T> Collector<T,?,Integer> summingInt(ToIntFunction<? super T> mapper)public static <T> Collector<T,?,Long> summingLong(ToLongFunction<? super T> mapper)public static <T> Collector<T,?,原创 2021-05-31 10:22:54 · 2497 阅读 · 0 评论 -
Stream Collectors - summarizingInt
public static <T> Collector<T,?,IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)public static <T> Collector<T,?,LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)publi原创 2021-05-31 10:21:11 · 3770 阅读 · 0 评论 -
Stream Collectors - reducing
public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)不能看方法名理解其作用,入参是一个二目运算函数参数,作用比较广泛。处理流程简单描述:第一步;a,b两个参数先分别赋值集合中的第一个和第二个元素,经过计算的结果赋值给a。第二步;取集合中第三个元素赋值给b,然后再对a,b两个参数进行计算,计算结果还是赋值给a。第三步;重复第二步,直到取完全原创 2021-05-31 10:19:27 · 1361 阅读 · 0 评论 -
Stream Collectors - partitioningBy
public static <T> Collector<T,?,Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)分区函数,返回一个map,key永远只有两个分别是boolean值false和true,用法和groupingBy类似。下面给一个简单的例子:void test29() { List<User> use...原创 2021-05-28 15:31:25 · 310 阅读 · 0 评论 -
Stream Collectors - minBy
public static <T> Collector<T,?,Optional<T>> minBy(Comparator<? super T> comparator)有求最大值的就有求最小值的例子和maxBy类似:void test28() { List<String> strlist = List.of("12","34","5","678","9"); Optional<String...原创 2021-05-28 15:16:29 · 702 阅读 · 0 评论 -
Stream Collectors - maxBy
public static <T> Collector<T,?,Optional<T>> maxBy(Comparator<? super T> comparator)简单地说就是求最大元素看个例子:打印输出:678原创 2021-05-28 10:43:21 · 2871 阅读 · 0 评论