亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

JAVA Collector

2023-10-19 08:18:34
97
0

Collector位于java.util.stream下,根據javaDoc描述:

A mutable reduction operation that accumulates input elements into a mutable result container, 
optionally transforming the accumulated result into a final representation after all input elements 
have been processed.  Reduction operations can be performed either sequentially or in parallel.

Collector是一種可變的聚集操作,將輸入的元素按照指定的策略收納到一個可變的容器中,待所有元素處理完成后,將結果轉換為一個最終的表示。這個最終表示例如常用的Map、Set、List等。

一、Collector接口定義

Collector是一個接口定義,接口包含了三個泛型和5個函數:

public interface Collector<T, A, R> {
    Supplier<A> supplier();
    BiConsumer<A, T> accumulator();
    BinaryOperator<A> combiner();
    Function<A, R> finisher();
    Set<Characteristics> characteristics();
}

接口泛型

T是輸入的對象類型、A是累加器的類型、R是最終收集的結果類型

接口函數

1. 建立累加器容器的supplier方法

 Supplier<A> supplier();

建立新的累加器容器。此方法定義如何收集數據,必須返回一個無參函數,此函數是用來創建一個空的累加器實例,供數據收集過程使用。

示例:

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

2. 累加器執行累加的具體實現accumulator方法

BiConsumer<A, T> accumulator(); 

該方法會返回執行累加操作的函數,此函數有兩個參數返回值為空,第一個參數是累加器容器,第二個參數是要累加的元素。

示例:

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

3. 合并容器combiner方法

Collector支持并行,并行會涉及任務分段與結果合并。 

BinaryOperator<A> combiner();

將兩個結果合并為一個,此方法返回一個供合并操作使用的函數。

示例:

@Override
public BinaryOperator<List<T>> combiner() {

    return (list1, list2) -> {
        list1.addAll(list2);
        return list1;
    };
}

4. 轉換為結果finisher方法

Function<A, R> finisher();

在容器上執行最終轉換,此方法返回一個轉換函數,參數為累計值,返回值就是最終要轉換返回的東西。

示例:

@Override
public Function<List<T>, List<T>> finisher() {
    return (i) -> i * i;
}

 5. characteristics方法

Set<Characteristics> characteristics();

返回一個不可變的Characteristics集合,其定義了收集器的行為,例如關于stream是否可以進行歸約,有哪些可以用的優化等。

Characteristics是一個包含三個項目的枚舉:

  1. UNORDERED--歸約結果不受流中項目的遍歷和累積順序的影響
  2. CONCURRENT--accumulator函數可以從多個線程同時調用,且該收集器可以并行歸約流。如果收集器沒有標為UNORDERED, 那它僅在用于無序數據源時才可以并行歸約。
  3. IDENTITY_FINISH--這表明完成器方法返回的函數是一個恒等函數,可以跳過。這種情況下,累加器對象將會直接用做歸約過程的最終結果。這也意味著,將累加器A不加檢查地轉換為結果R是安全的。

二、常用的Collector方法

// 類型歸納方法
// 通過Stream的.collect方法進行
Collector.toList();
Collector.toMap();
Collector.toSet();
Collector.toCollection();
Collector.toConcurrentMap();

// joining
// 將元素以某種規則連接起來
.stream().collect(Collectors.joining());

// collectingAndThen

// groupingBy

// partitioningBy

// counting

// maxBy/minBy

// summingInt/Double/Long

// summarizingInt/Double/Long

// mapping

// reducing

// 待更新

 

 

三、根據集合來獲取stream

stream的常用方法:

  • 終結方法:返回值類型不再是stream接口本身類型的,例如forEach、count等。
  • 非終結方法:返回值類型仍式stream接口自身類型的方法,例如filter、limit等。

方法名稱

方法作用

方法種類

是否支持鏈式調用

count

統計個數

終結方法

forEach

逐一處理

終結方法

filter

過濾

函數拼接

limit

取用前幾個

函數拼接

skip

跳過前幾個

函數拼接

map

映射

函數拼接

concat

組合

函數拼接

0條評論
0 / 1000
cactusii
15文章數
0粉絲數
cactusii
15 文章 | 0 粉絲
原創

JAVA Collector

2023-10-19 08:18:34
97
0

Collector位于java.util.stream下,根據javaDoc描述:

A mutable reduction operation that accumulates input elements into a mutable result container, 
optionally transforming the accumulated result into a final representation after all input elements 
have been processed.  Reduction operations can be performed either sequentially or in parallel.

Collector是一種可變的聚集操作,將輸入的元素按照指定的策略收納到一個可變的容器中,待所有元素處理完成后,將結果轉換為一個最終的表示。這個最終表示例如常用的Map、Set、List等。

一、Collector接口定義

Collector是一個接口定義,接口包含了三個泛型和5個函數:

public interface Collector<T, A, R> {
    Supplier<A> supplier();
    BiConsumer<A, T> accumulator();
    BinaryOperator<A> combiner();
    Function<A, R> finisher();
    Set<Characteristics> characteristics();
}

接口泛型

T是輸入的對象類型、A是累加器的類型、R是最終收集的結果類型

接口函數

1. 建立累加器容器的supplier方法

 Supplier<A> supplier();

建立新的累加器容器。此方法定義如何收集數據,必須返回一個無參函數,此函數是用來創建一個空的累加器實例,供數據收集過程使用。

示例:

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

2. 累加器執行累加的具體實現accumulator方法

BiConsumer<A, T> accumulator(); 

該方法會返回執行累加操作的函數,此函數有兩個參數返回值為空,第一個參數是累加器容器,第二個參數是要累加的元素。

示例:

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

3. 合并容器combiner方法

Collector支持并行,并行會涉及任務分段與結果合并。 

BinaryOperator<A> combiner();

將兩個結果合并為一個,此方法返回一個供合并操作使用的函數。

示例:

@Override
public BinaryOperator<List<T>> combiner() {

    return (list1, list2) -> {
        list1.addAll(list2);
        return list1;
    };
}

4. 轉換為結果finisher方法

Function<A, R> finisher();

在容器上執行最終轉換,此方法返回一個轉換函數,參數為累計值,返回值就是最終要轉換返回的東西。

示例:

@Override
public Function<List<T>, List<T>> finisher() {
    return (i) -> i * i;
}

 5. characteristics方法

Set<Characteristics> characteristics();

返回一個不可變的Characteristics集合,其定義了收集器的行為,例如關于stream是否可以進行歸約,有哪些可以用的優化等。

Characteristics是一個包含三個項目的枚舉:

  1. UNORDERED--歸約結果不受流中項目的遍歷和累積順序的影響
  2. CONCURRENT--accumulator函數可以從多個線程同時調用,且該收集器可以并行歸約流。如果收集器沒有標為UNORDERED, 那它僅在用于無序數據源時才可以并行歸約。
  3. IDENTITY_FINISH--這表明完成器方法返回的函數是一個恒等函數,可以跳過。這種情況下,累加器對象將會直接用做歸約過程的最終結果。這也意味著,將累加器A不加檢查地轉換為結果R是安全的。

二、常用的Collector方法

// 類型歸納方法
// 通過Stream的.collect方法進行
Collector.toList();
Collector.toMap();
Collector.toSet();
Collector.toCollection();
Collector.toConcurrentMap();

// joining
// 將元素以某種規則連接起來
.stream().collect(Collectors.joining());

// collectingAndThen

// groupingBy

// partitioningBy

// counting

// maxBy/minBy

// summingInt/Double/Long

// summarizingInt/Double/Long

// mapping

// reducing

// 待更新

 

 

三、根據集合來獲取stream

stream的常用方法:

  • 終結方法:返回值類型不再是stream接口本身類型的,例如forEach、count等。
  • 非終結方法:返回值類型仍式stream接口自身類型的方法,例如filter、limit等。

方法名稱

方法作用

方法種類

是否支持鏈式調用

count

統計個數

終結方法

forEach

逐一處理

終結方法

filter

過濾

函數拼接

limit

取用前幾個

函數拼接

skip

跳過前幾個

函數拼接

map

映射

函數拼接

concat

組合

函數拼接

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
1
0