Java8 学习笔记-stream-collection(2)

原创 2017年01月04日 19:15:45

这一遍是继上一篇collection的补充.

上篇, 我们创建了Map的一个实例, 但是不能适用于很多情况

Collectors.groupingBy()

String[] names3 = { "Larry", "Lati", "Moe", "Curly", "Mobi" };


        Stream.of(names3).collect(Collectors.groupingBy(b -> b.charAt(0)))
                .forEach((key, value) -> {
                    System.out.println("Key : " + key + " Value : " + value);
                });

输出:
Key : C Value : [Curly]
Key : L Value : [Larry, Lati]
Key : M Value : [Moe, Mobi]




Stream.of(names3)
                .collect(
                        Collectors.groupingBy(b -> b.charAt(0),
                                Collectors.counting()))
                .forEach((key, value) -> {
                    System.out.println("Key : " + key + " Value : " + value);
                });
输出:
Key : C Value : 1
Key : L Value : 2
Key : M Value : 2

再参考一下解释文档

* @see #groupingBy(Function, Collector)
  * @see #groupingBy(Function, Supplier, Collector)
  * @see #groupingByConcurrent(Function)
 */
public static <T, K> Collector<T, ?, Map<K, List<T>>>
groupingBy(Function<? super T, ? extends K> classifier) {
    return groupingBy(classifier, toList());
}

这里我们可以看见, 这里有三个method, 也就是有三种方式可供选择, 并且返回值为Map

  1. Function 分组的原则 , 参考工具Function类
    A1 A2 A3 B1 B2 B3
    function为first letter
    结果: A [A1,A2,A3] B [B1,B2,B3]
  2. Collector
  3. Supplier

这里来讨论下参数Collector, 也就是Collectors.method究竟是用来干啥的.
API文档

Implementations of Collector that implement various useful reduction operations, such as accumulating elements into collections, summarizing elements according to various criteria, etc.

这里说道, collectors是用于做 various useful reduction operations.
然而新的问题, reduction operation 是什么意思?
字典上的意思是, 减少,缩图等 ,可是意思还是说不通

官方文档中写着

The JDK contains many terminal operations (such as average, sum, min, max, and count) that return one value by combining the contents of a stream. These operations are called reduction operations.

我认为是: 简化+组合的意思吧( 也就是具体操作的意思吧!? ), 不过这里, 理解为Map的value值产生的方式比较好.
看API文档, 有如下的操作

  • 集合: Accumulate(聚集),Group(分组) e.g toXXX
  • 字符串: 操作 e.g joining
  • 数字: summingInt
  • 布尔值: partitioningBy

回到正题, Collector和Supplier有什么用, Supplier相当于提供商, 也就是new object(),这一执行任务的对象, Collector则是该怎么处理数据, 这一个行为.
而Collectors.method 将上面两个行为结合在一起完成了, 也就是经常不需要Supplier这一参数啦


扩展学习:
mkyong-Java 8 – Stream Collectors groupingBy examples

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

Java8 学习笔记-stream-collection

本篇讨论的是 : Java8集合(collection)的创建,初始化方式为什么是不同?

Java8学习笔记之Stream API

摘要: 原创出处 http://peijie2016.oschina.io 欢迎转载,保留摘要,谢谢! Stream是Java8引入的一个重度使用lambda表达式的API。 Stream可以用流的...

java8 stream学习笔记

pipeline 为了更好地对集合进行并行操作,java8中加入了stream API。以前对集合的操作策略由客户端提供,有了stream API后,对集合的操作集成到了集合内部,客户端只需要按需调...

java8 Stream学习笔记

Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (b...

Java8学习笔记 — 【Stream API】

Stream(java.util.stream.*)是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API对集合...

13. Java类集 Part 2(Map接口、SortedMap接口、集合工具类Collection、Stack类、属性类Properties) ----- 学习笔记

13.7  Map接口       13.7.1

Java 8 vs. Scala(二):Stream vs. Collection

【编者按】在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比。在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要...

Java菜鸟学习笔记--I/O篇(一):I/O Stream 简介

什么是IO? 在Java API 中,可以从某个地方读入一个字节序列的对象叫做输入流,可以向某个地方写入一个字节序列的对象叫输出流。某个 地方指的是來源地址或者目的地,一般都是文件,或者是网络连...

Java for Web学习笔记(二四):EL(4)流(Stream)

这个假期,几家在装修,很吵,说是不准节假日装修,谁理。我觉得中国房子的质量除了90年代的比较差外,很大程度都是装修给搞坏的,这家抡大锤,那家掀地板。就是个碉堡,也有毁坏的日子。 什么是流 对于Col...

Java JDK6学习笔记 Stream

 http://book.51cto.com/art/200812/101093.htm 14.2 位流计算机中的数据都是以0与1的方式来存储,如果要在两个装置之间进行数据的存取,当然也是以0与1位的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java8 学习笔记-stream-collection(2)
举报原因:
原因补充:

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