JAVA8之collect总结(给自己)

原创 2016年07月18日 17:23:44

一,collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器)

二,预定义收集器包括将流元素归约和汇总到一个值.如下

工厂方法

返回类型

用于

toList

List<T>

把流中所有元素收集到List中

示例:List<Menu> menus=Menu.getMenus.stream().collect(Collectors.toList())

toSet

Set<T>

把流中所有元素收集到Set中,删除重复项

示例:Set<Menu> menus=Menu.getMenus.stream().collect(Collectors.toSet())

toCollection

Collection<T>

把流中所有元素收集到给定的供应源创建的集合中

示例:ArrayList<Menu> menus=Menu.getMenus.stream().collect(Collectors.toCollection(ArrayList::new))

Counting

Long

计算流中元素个数

示例:Long count=Menu.getMenus.stream().collect(counting);

SummingInt

Integer

对流中元素的一个整数属性求和

示例:Integer count=Menu.getMenus.stream().collect(summingInt(Menu::getCalories))

averagingInt

Double

计算流中元素integer属性的平均值

示例:Double averaging=Menu.getMenus.stream().collect(averagingInt(Menu::getCalories))

Joining

String

连接流中每个元素的toString方法生成的字符串

示例:String name=Menu.getMenus.stream().map(Menu::getName).collect(joining(“, ”))

maxBy

Optional<T>

一个包裹了流中按照给定比较器选出的最大元素的optional
如果为空返回的是Optional.empty()

示例:Optional<Menu> fattest=Menu.getMenus.stream().collect(maxBy(Menu::getCalories))

minBy

Optional<T>

一个包裹了流中按照给定比较器选出的最大元素的optional
如果为空返回的是Optional.empty()

示例: Optional<Menu> lessest=Menu.getMenus.stream().collect(minBy(Menu::getCalories))

Reducing

归约操作产生的类型

从一个作为累加器的初始值开始,利用binaryOperator与流中的元素逐个结合,从而将流归约为单个值

示例:int count=Menu.getMenus.stream().collect(reducing(0,Menu::getCalories,Integer::sum));

collectingAndThen

转换函数返回的类型

包裹另一个转换器,对其结果应用转换函数

示例:Int count=Menu.getMenus.stream().collect(collectingAndThen(toList(),List::size))

groupingBy

Map<K,List<T>>

根据流中元素的某个值对流中的元素进行分组,并将属性值做为结果map的键

示例:Map<Type,List<Menu>> menuType=Menu.getMenus.stream().collect(groupingby(Menu::getType))

partitioningBy

Map<Boolean,List<T>>

根据流中每个元素应用谓语的结果来对项目进行分区

示例:Map<Boolean,List<Menu>> menuType=Menu.getMenus.stream().collect(partitioningBy(Menu::isType));


三,预定义收集器可以用groupby对流中元素进行分组或者用partitioningBy进行分区

四,收集器可以高效的复合起来,进行多级分组,多级分区和归约

五,可以自己实现collector接口进行定义自己的收集器

版权声明:本文为博主原创文章,未经博主允许不得转载。

java的Collection类详解

数组: 存储同一种数据类型的集合容器. 数组的特点: 1. 只能存储同一种数据类型的数据。 2. 一旦初始化,长度固定。  3. 数组中的元素与元素之间的内存地址是连续的。 注意: Object类...
  • oguro
  • oguro
  • 2016年11月30日 21:10
  • 24057

Java - Collection

collection层次结构 理论 集合中存放的依然是对象的引用而不是对象 集合中只能放置对象的引用,不能放置原生数据类型, 我们需要使用原生数据类型的封装类才能加入到集合中 集合中放置的都是...
  • itlwc
  • itlwc
  • 2013年08月21日 15:13
  • 37213

Java8中聚合操作collect、reduce方法详解

Stream的基本概念 Stream和集合的区别: Stream不会自己存储元素。元素储存在底层集合或者根据需要产生。 Stream操作符不会改变源对象。相反,它会返回一个持有结果的新的Strea...
  • piglite
  • piglite
  • 2016年12月22日 23:51
  • 6079

Java集合类详解

如果您喜欢这些文章,欢迎点击此处订阅本Blog
  • softwave
  • softwave
  • 2009年05月11日 00:34
  • 202730

Java8中使用filter()过滤列表,使用collect将stream转化为list

Reference: https://www.mkyong.com/java8/java-8-streams-filter-examples/ /* In Java 8, using st...
  • huludan
  • huludan
  • 2017年01月10日 18:22
  • 19782

Java 8系列之Stream的强大工具Collector

概述前面我们使用过collect(toList()),在流中生成列表。实际开发过程中,List又是我们经常用到的数据结构,但是有时候我们也希望Stream能够转换生成其他的值,比如Map或者set,甚...
  • IO_Field
  • IO_Field
  • 2017年02月10日 16:18
  • 11951

【Qt】编译时collect2.exe:-1: error: error: ld returned 1 exit status

程序没有问题,但是运行的时候,会出现: :-1: error: cannot open output file debug\untitled4.exe: Permission denied co...
  • qq_17342661
  • qq_17342661
  • 2017年04月18日 11:23
  • 1718

Java8 Stream经典示例

示例一: class User { private int id; private String name; public User(int id, String name) { th...
  • mn960mn
  • mn960mn
  • 2016年04月06日 16:53
  • 2767

JAVA8之collect总结

一,collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器) 二,预定义收集器包括将流元素归约和汇总到一个值.如下 工厂方法 ...
  • u014351782
  • u014351782
  • 2016年12月22日 18:37
  • 950

流API--分组和分片

分组和分片 对具有相同特性的值进行分组时一个很常见的任务,我们可以直接使用groupingBy来进行分组。 当分类函数是一个predicate函数时,流会被分成2组列表,一组返回true,一组返回...
  • u011794238
  • u011794238
  • 2015年11月09日 16:40
  • 846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA8之collect总结(给自己)
举报原因:
原因补充:

(最多只允许输入30个字)