1. 程式人生 > >java8-07-自定義Collector-ToList

java8-07-自定義Collector-ToList

宣告

這一系列文章旨在幫助大家理解 Collector 的執行流程,至於實現的是否高效、是否優雅、是否合理等暫且不論。

現在來實現一個和 java.util.stream.Collectors#toList 一樣效果的 ToListCollector

簡單實現

static class ToListCollector<T> implements Collector<T, List<T>, List<T>> {

    @Override
    public Supplier<List<T>> supplier
() { return () -> Lists.newArrayList(); } @Override public BiConsumer<List<T>, T> accumulator() { return (list, e) -> list.add(e); } @Override public BinaryOperator<List<T>> combiner() { return (acc1, acc2) -> { acc1.addAll(acc2); return
acc1; }; } @Override public Function<List<T>, List<T>> finisher() { return (acc) -> acc; } @Override public Set<Characteristics> characteristics() { Set<Characteristics> ret = new HashSet<>(); ret.add(Characteristics.CONCURRENT); ret.add(Characteristics.IDENTITY_FINISH); return
Collections.unmodifiableSet(ret); } }

簡化程式碼

static class ToListCollector2<T> implements Collector<T, List<T>, List<T>> {

    @Override
    public Supplier<List<T>> supplier() {
        return ArrayList::new;
    }

    @Override
    public BiConsumer<List<T>, T> accumulator() {
        return List::add;
    }

    @Override
    public BinaryOperator<List<T>> combiner() {
        return (acc1, acc2) -> {
            acc1.addAll(acc2);
            return acc1;
        };
    }

    @Override
    public Function<List<T>, List<T>> finisher() {
        return Function.identity();
    }

    @Override
    public Set<Characteristics> characteristics() {
        return Collections.unmodifiableSet(
                EnumSet.of(
                        Characteristics.CONCURRENT,
                        Characteristics.IDENTITY_FINISH
                )
        );
    }
}

使用自定義Collector

@Test
public void testListCollector() {
    List<Integer> list = IntStream.rangeClosed(1, 5).boxed()
      .collect(new ToListCollector<>());
    System.out.println(list);

    List<Integer> list2 = Stream.iterate(1, i -> i + 1).limit(5)
      .collect(new ToListCollector2<>());
    System.out.println(list2);
}

部落格原始碼

相關推薦

java8-07-定義Collector-ToList

宣告 這一系列文章旨在幫助大家理解 Collector 的執行流程,至於實現的是否高效、是否優雅、是否合理等暫且不論。 現在來實現一個和 java.util.stream.Collec

.net圖表之ECharts隨筆07-定義系列(多邊形)

  搞了一天多,才勉強搞出了一個不緊湊的六邊形統計圖,是真的菜。 這裡ECharts的用法與06說的同一種,直接使用帶all的js 先上個效果圖,用面積來表示人數的多少 1. 引數option的tooltip和title還是一樣設定 2. 還有一個grid,這是用來設定y軸的實際長度的

07.定義 s.count() #規避'ccc'.count('cc')的問題

def count_self(s,i): if not isinstance(s,str) and not isinstance(i,str): return 0 n=len(i) result=0

java8 stream定義分組求和並排序

public static void main(String[] args) { List<GroupDetailDTO> list = new ArrayList<>(); GroupDetailDTO dto1 = new GroupDeta

java8 定義收集器Collector

Collectors類的一些靜態方法 import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Colle

【UE4】 第07講 實現定義的行走控制元件

      在圖形業,只有技術是不行的,你要明白我們從事的工作,我們可是在作詩,我們是詩人 - Nvidia創始人黃仁勳(圖形皇帝)       (版權宣告,禁止轉載)      U

Java8 - 定製歸一化收集器(reducing)得到定義結果集

reducing簡介 reducing 是一個收集器(操作),從字面意義上可以理解為“減少操作”:輸入多個元素,在一定的操作後,元素減少。 reducing 有多個過載方法,其中一個方法如下: public static <T> Collector<T

java8生成可定義長度的隨機數

剛好工作中用到,用java8的語法寫了一個獲取隨機數的工具分享給大家: package com.java8; import java.util.Random; /** * @author Administrator */ public interface RandomUtil {

java8定義函式介面

java8開始可以自定義函式式介面,方便開發人員使用lambda表示式,簡化了程式碼量。 1.首先定義一個函式式介面(使用泛型能過更好的適配所有物件的操作)      /** * Represents a function that accepts t

07.HTML標籤以及定義定界符配置---《Beetl視訊課程》

本期視訊實現了評論列表分頁; 內容簡介:使用了標籤函式include完成分頁抽取 一起學beetl目錄:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK HTML標籤 Beetl 也支援HTML t

java8 stream sort定義複雜排序

java 8 自定義排序 需求 今天在專案中遇到個需求,按照物件中的三個屬性進行排序。 具體要求: 前提:物件 Obj [a=a,b=b,c=c] 1、 優先順序為a > b > c 2、 a屬性為中文,固定排序規則為:政府,合作,基金 … … 3、 b的

07.Django中的定義認證方式和許可權的設計與使用

一:自定義認證方式 前提條件 1:建立簡單的django工程 2:簡單的login模組 3:基礎的配置假設已經完成 以上如果哪點不明白,請檢視前邊章節誒的內容 login/views.py: c

07 lds檔案與定義

lds檔案用於指定程式連結時的不同段內容的位置安排。linux核心映象裡就是利用lds檔案,把不同的內容劃分成很多不同的段. uboot裡的命令也就是利用此功能,把所有的命令統一到一個段裡. arm-linux-gnueabihf-ld –verbose &

Java8定義條件讓集合分組

bic pri set 兩個 odi all edi 操作 character ** 將一個指定類型對象的集合按照自定義的一個操作分組; 每組對應一個List、最終返回結果類型是:List<List<T>> @param <T>*

Java之——Java8 定義函式程式設計

參考: https://www.cnblogs.com/figure9/p/java-8-lambdas-insideout-language-features.html https://blog.csdn.net/ioriogami/article/details

【新浪微博專案】07--設定navigationItem和定義TitleButton

#import "MRHomeViewController.h" #import "MRNavigationController.h" #import "Header.h" #import "UIImage+MJ.h" #import "UIBarButtonItem+MJ.h" #import "MRTit

WF4.0以上使用代碼完整定義動態生成執行工作流Xaml文件

load 控制 brush 類型 rpv 返回 cap 並且 sco 給大家分享一下,如何完全使用代碼自定義的創建生成工作流文件(用代碼創建Xaml文件),並且動態加載運行所生成的工作流。 工作流生成後 在Xaml文件裏的主要節點如下: 輸入輸出參數 <x

定義maven變量以及maven內置常量

文件 rect 需要 nal tool tdi cto packaging 構建 本文轉自:http://zheng12tian.iteye.com/blog/1770909 在創建Maven工程後,插件配置中通常會用到一些Maven變量,因此需要找個地方對這些變量進行統一

WPF定義輪播控件

cnblogs log .cn 蛋疼 源碼 logs alt files 一個      閑得蛋疼做了一個WPF制作輪播動畫,勉強可以看,寫個隨筆留個腳印。      源碼:有需要的可留言。              效果圖:   WPF

定義MySQL函數

ffffff 現在 sql code begin 函數 limit round 其他 1、MySQL創建函數語法: CREATE   [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter