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