Collectors类的静态工厂方法(来自于JAVA8实战)

Collectors类的静态工厂方法(来自于JAVA8实战)


工厂方法返回类型用于
toListList把流中所有项目收集到一个List
toSetSet把流中所有项目收集到一个Set,删除重复项
toCollectionCollection把流中所有项目收集到给定的供应源创建的集合
countingLong计算流中元素的个数
summingIntInteger对流中项目的一个整数属性求和
averagingIntDouble计算流中项目Integer 属性的平均值
summarizingIntIntSummaryStatistics收集关于流中项目Integer 属性的统计值,例如最大、最小、总和与平均值
joining`String连接对流中每个项目调用toString 方法所生成的字符串
maxByOptional一个包裹了流中按照给定比较器选出的最大元素的Optional,或如果流为空则为Optional.empty()
minByOptional一个包裹了流中按照给定比较器选出的最小元素的Optional,或如果流为空则为Optional.empty()
reducing归约操作产生的类型从一个作为累加器的初始值开始,利用BinaryOperator 与流中的元素逐个结合,从而将流归约为单个值
collectingAndThen转换函数返回的类型包裹另一个收集器,对其结果应用转换函数
groupingByMap K, List根据项目的一个属性的值对流中的项目作问组,并将属性值作为结果Map 的键
partitioningByMap Boolean,List根据对流中每个项目应用谓词的结果来对项进行分区

工厂方法 返回类型 用 于

toList List 把流中所有项目收集到一个List

使用示例:List dishes = menuStream.collect(toList());

toSet Set 把流中所有项目收集到一个Set,删除重复项

使用示例:Set dishes = menuStream.collect(toSet());

toCollection Collection 把流中所有项目收集到给定的供应源创建的集合

使用示例:Collection dishes = menuStream.collect(toCollection(),
ArrayList::new);

counting Long 计算流中元素的个数

使用示例:long howManyDishes = menuStream.collect(counting());

summingInt Integer 对流中项目的一个整数属性求和

使用示例:int totalCalories =
menuStream.collect(summingInt(Dish::getCalories));

averagingInt Double 计算流中项目Integer 属性的平均值

使用示例:double avgCalories =
menuStream.collect(averagingInt(Dish::getCalories));

summarizingInt IntSummaryStatistics收集关于流中项目Integer 属性的统计值,例如最大、最小、总和与平均值

使用示例:IntSummaryStatistics menuStatistics =
menuStream.collect(summarizingInt(Dish::getCalories));

joining` String 连接对流中每个项目调用toString 方法所生成的字符串

使用示例:String shortMenu =
menuStream.map(Dish::getName).collect(joining(“, “));

maxBy Optional一个包裹了流中按照给定比较器选出的最大元素的Optional,或如果流为空则为Optional.empty()

使用示例:Optional fattest =
menuStream.collect(maxBy(comparingInt(Dish::getCalories)));

minBy Optional一个包裹了流中按照给定比较器选出的最小元素的Optional,或如果流为空则为Optional.empty()

使用示例:Optional lightest =
menuStream.collect(minBy(comparingInt(Dish::getCalories)));

reducing 归约操作产生的类型从一个作为累加器的初始值开始,利用BinaryOperator 与流中的元素逐个结合,从而将流归约为单个值

使用示例:int totalCalories =
menuStream.collect(reducing(0, Dish::getCalories, Integer::sum));

collectingAndThen 转换函数返回的类型 包裹另一个收集器,对其结果应用转换函数

使用示例:int howManyDishes =
menuStream.collect(collectingAndThen(toList(), List::size));
groupingBy Map

根据项目的一个属性的值对流中的项目作问组,并将属性值作为结果Map 的键

使用示例:Map

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

使用示例:Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8中的Collectors.toMap方法可以将Stream中的元素转换为一个Map对象。该方法有三个参数:keyMapper,valueMapper和mergeFunction。其中,keyMapper用于将Stream中的元素转换为Map的key,valueMapper用于将Stream中的元素转换为Map的value,mergeFunction用于处理当key重复时的冲突情况。 下面是一个例子,假设我们有一个List对象,其中包含多个Person对象,每个Person对象都有一个唯一的id属性和一个name属性。我们可以使用Collectors.toMap方法将List转换为一个以id为key,以Person对象为value的Map对象: ```java List<Person> personList = new ArrayList<>(); // 假设我们已经将多个Person对象添加到了personList中 Map<Integer, Person> personMap = personList.stream() .collect(Collectors.toMap(Person::getId, Function.identity())); ``` 在上面的例子中,Person::getId表示将Person对象的id属性作为Map的key,Function.identity()表示将Person对象本身作为Map的value。如果我们想要将Person对象的name属性作为Map的value,可以这样写: ```java Map<Integer, String> personMap = personList.stream() .collect(Collectors.toMap(Person::getId, Person::getName)); ``` 如果我们的List中有重复的id,那么上面的代码将会抛出IllegalStateException异常。为了避免这种情况,我们可以使用mergeFunction参数来处理冲突。例如,如果我们想要将重复的id的Person对象合并为一个List,可以这样写: ```java Map<Integer, List<Person>> personMap = personList.stream() .collect(Collectors.toMap(Person::getId, Collections::singletonList, (list1, list2) -> { List<Person> resultList = new ArrayList<>(list1); resultList.addAll(list2); return resultList; })); ``` 在上面的代码中,Collections::singletonList表示将Person对象转换为只包含一个元素的List,mergeFunction参数则表示将两个List合并为一个List。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值