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学习笔记

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

Java8学习笔记 — 【Stream API】

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

Java8学习笔记之Stream API

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

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 JDK6学习笔记 Stream

http://book.51cto.com/art/200812/101093.htm 14.2 位流计算机中的数据都是以0与1的方式来存储,如果要在两个装置之间进行数据的存取,当然也是以0与1位的方...

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

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

JAVA学习笔记8——面向对象概述2_内存分配

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。 好啦,开始第8篇了,这篇主要讲JAVA程序运行时的内存分析(包含继承...

<JAVA学习笔记8>——生产者、消费者案例(2)

承接上篇博文,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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