美文网首页
高级集合——组合收集器

高级集合——组合收集器

作者: hello高world | 来源:发表于2017-01-13 09:52 被阅读0次

组合收集器

1.代码

package org.java8.collector;

import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

import org.java8.vo.Album;
import org.java8.vo.Artist;
import org.java8.vo.Track;

public class MultiCollector {

    /**逆向统计,根据值来统计key或者整个对象**/
    public static void main(String[] args) {
        Artist tinygao2 = new Artist("tinygao2", "zh");
        Artist tinygao1 = new Artist("tinygao1", "zh");
        
        Album album1 = new Album(
                                "album1", 
                                Arrays.asList(new Track("tinygao", 1)), 
                                Arrays.asList(
                                        tinygao2,
                                        tinygao1
                                ));
        
        Album album2= new Album(
                                "album2", 
                                Arrays.asList(new Track("tinygao", 1)), 
                                Arrays.asList(
                                        tinygao2,
                                        tinygao1
                                ));
        
        Album album3  = new Album(
                                "album3", 
                                Arrays.asList(new Track("tinygao", 1)), 
                                Arrays.asList(
                                        tinygao1
                                ));
        Stream<Album> albums1 = Stream.of(album1,album2,album3);
        Stream<Album> albums2 = Stream.of(album1,album2,album3);
        numberOfAlbums(albums1).forEach((x, y)->System.out.println(x+"->"+y));
        /**使用完流之后就会关闭, 再使用就会报错stream has already been operated upon or closed**/
        nameOfAlbums(albums2).forEach((x, y)->System.out.println(x+"->"+y));
        
    }
    
    public static Map<Artist, Long> numberOfAlbums(Stream<Album> albums) {
        /**先获取Artist function,然后在做reduce操作**/
        /** Map<Artist,List<Album>> 为下面的返回值
            albums.collect(groupingBy(album -> album.getMainMusician()));
        **/
        return albums.collect(groupingBy(album -> album.getMainMusician(),
                counting()));
    }
    
    public static Map<Artist, List<String>> nameOfAlbums(Stream<Album> albums) {
        /**Album::getName 在mapping中是对Map<Artist,List<Album>> 后者做mapping**/
        return albums.collect(groupingBy(Album::getMainMusician,
        mapping(Album::getName, toList())));
    }
}

2.输出

tinygao1->1
tinygao2->2
tinygao1->[album3]
tinygao2->[album1, album2]

相关文章

  • 高级集合——组合收集器

    组合收集器 1.代码 2.输出 tinygao1->1tinygao2->2tinygao1->[album3]t...

  • 高级集合——收集器

    集合收集器 1、有时候你想把流转成某一种集合进行使用 2、打印信息 122==黄金分割线==12

  • Java垃圾回收器(二)

    垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收...

  • Java垃圾回收器(三)

    垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收...

  • Java垃圾回收器(一)

    垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收...

  • Java垃圾回收器(四)

    垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收...

  • Java垃圾回收器(五)

    垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收...

  • 垃圾收集器总结

    垃圾收集器总结 各种收集器组合使用的参数 Serial + CMS 注意不能使用-XX:+UseConcMarkS...

  • 四、常见垃圾收集器

    一、垃圾收集器组合图 二、垃圾收集器的发展史 单核时代 - 串行垃圾收集器 多核时代 - 小内存1)CMS是老年代...

  • GC - 收集器

    概述 垃圾收集器是垃圾回收算法的具体实现,不同商家、不同版本的 JVM 所提供的垃圾收集器可能会有差别 收集器组合...

网友评论

      本文标题:高级集合——组合收集器

      本文链接:https://www.haomeiwen.com/subject/yfajbttx.html