国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java lambda表達(dá)式如何自定義一個toList Collector

這篇具有很好參考價值的文章主要介紹了Java lambda表達(dá)式如何自定義一個toList Collector。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

匿名類:

package l8;

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Collectors;

public class CollectorToList2 {
    public static void main(String[] args) {

        /**
         *
         <T> – the type of input elements to the reduction operation
         <A> – the mutable accumulation type of the reduction operation (often hidden as an implementation detail)
         <R> – the result type of the reduction operation  最終返回結(jié)果的類型
         */
        Collector<Integer, List<Integer>, List<String>> toList = new Collector<Integer, List<Integer>, List<String>>() {

            // 初始一個容器,用于做為累加的容器
            @Override
            public Supplier<List<Integer>> supplier() {
                return () -> new ArrayList<>();
            }

            /**
             * 元素累加
             * @return
             */
            @Override
            public BiConsumer<List<Integer>, Integer> accumulator() {
                return List::add;
            }

            /**
             * 將多個容器進(jìn)行合并(應(yīng)該是在并行Stream時使用的)
             * @return
             */
            @Override
            public BinaryOperator<List<Integer>> combiner() {
                return (a, b) -> {
                    System.out.println("combiner call");
                    a.addAll(b);
                    return a;
                };
            }

            /**
             * 最終類型轉(zhuǎn)換
             * @return
             */
            @Override
            public Function<List<Integer>, List<String>> finisher() {
                return list -> list.stream()
                        .map(e -> e + "").collect(Collectors.toList());
            }


            @Override
            public Set<Characteristics> characteristics() {
                return Collections.singleton(Characteristics.UNORDERED);
            }
        };


        List<String> collect = Arrays.asList(1, 2, 3).stream().collect(toList);
        System.out.println(collect);

        collect = Arrays.asList(1, 2, 3).parallelStream().collect(toList);
        System.out.println(collect);
    }
}
javascript:void(0)

Combiner:

Java lambda表達(dá)式如何自定義一個toList Collector,java,開發(fā)語言

Java lambda表達(dá)式如何自定義一個toList Collector,java,開發(fā)語言

應(yīng)用:

優(yōu)化初始容器的容量:


/**
 * <T> – the type of input elements to the reduction operation
 * <A> – the mutable accumulation type of the reduction operation (often hidden as an implementation detail)
 * <R> – the result type of the reduction operation  最終返回結(jié)果的類型
 */
class ToListWithInitialCapacity implements Collector<Integer, List<Integer>, List<String>> {
    private int initialCapacity;

    public ToListWithInitialCapacity(int initialCapacity) {
        this.initialCapacity = initialCapacity;
    }

    // 初始一個容器,用于做為累加的容器
    @Override
    public Supplier<List<Integer>> supplier() {
        return () -> new ArrayList<>(initialCapacity);
    }

    /**
     * 元素累加
     *
     * @return
     */
    @Override
    public BiConsumer<List<Integer>, Integer> accumulator() {
        return List::add;
    }

    /**
     * 將多個容器進(jìn)行合并(應(yīng)該是在并行Stream時使用的)
     *
     * @return
     */
    @Override
    public BinaryOperator<List<Integer>> combiner() {
        return (a, b) -> {
            System.out.println("combiner call");
            a.addAll(b);
            return a;
        };
    }

    /**
     * 最終類型轉(zhuǎn)換
     *
     * @return
     */
    @Override
    public Function<List<Integer>, List<String>> finisher() {
        return list -> list.stream()
                .map(e -> e + "").collect(Collectors.toList());
    }


    @Override
    public Set<Characteristics> characteristics() {
        return Collections.singleton(Characteristics.UNORDERED);
    }
}

Jdk toList默認(rèn)實(shí)現(xiàn):

    /**
     * Returns a {@code Collector} that accumulates the input elements into a
     * new {@code List}. There are no guarantees on the type, mutability,
     * serializability, or thread-safety of the {@code List} returned; if more
     * control over the returned {@code List} is required, use {@link #toCollection(Supplier)}.
     *
     * @param <T> the type of the input elements
     * @return a {@code Collector} which collects all the input elements into a
     * {@code List}, in encounter order
     */
    public static <T>
    Collector<T, ?, List<T>> toList() {
        return new CollectorImpl<>(ArrayList::new, List::add,
                                   (left, right) -> { left.addAll(right); return left; },
                                   CH_ID);
    }

Java lambda表達(dá)式如何自定義一個toList Collector,java,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-790064.html

到了這里,關(guān)于Java lambda表達(dá)式如何自定義一個toList Collector的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Lambda表達(dá)式(JAVA)

    Lambda表達(dá)式(JAVA)

    注:如果沒有學(xué)過 匿名內(nèi)部類 和 接口 不推薦往下看。 (parameters) - expression 或 (parameters) -{ statements; } parameters:表示參數(shù)列表; -:可理解為“被用于”的意思; expression:表示一條語句; statements:表示多條語句。 Lambda可以理解為:Lambda就是匿名內(nèi)部類的簡化。 lambda表達(dá)式

    2024年02月08日
    瀏覽(28)
  • Java Lambda表達(dá)式

    1.1 函數(shù)式編程思想概括 在數(shù)學(xué)中,函數(shù)就是有輸入量、輸出量的一套計(jì)算方案,也就是“拿數(shù)據(jù)做操作” 面向?qū)ο笏枷霃?qiáng)調(diào)“必須通過對象的形式來做事情” 函數(shù)式思想則盡量忽略面

    2024年02月07日
    瀏覽(42)
  • Java Lambda 表達(dá)式

    Java Lambda 表達(dá)式

    ??wei_shuo的個人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! Java Lambda 表達(dá)式是 Java 8 引入的一種函數(shù)式編程特性,它是一種輕量級的匿名函數(shù),允許我們將函數(shù)作為方法的參數(shù)進(jìn)行傳遞。Lambda 表達(dá)式可以理解為是一種簡潔的方式來表示可傳遞的代碼塊,它可以替代傳統(tǒng)的匿名內(nèi)

    2024年02月08日
    瀏覽(34)
  • 【JAVA】包裝類、正則表達(dá)式、Arrays類、Lambda表達(dá)式

    包裝類是8種基本數(shù)據(jù)類型對應(yīng)的引用類型 作用:后期的集合和泛型不支持基本類型,只能使用包裝類 基本數(shù)據(jù)類型和其對應(yīng)的引用數(shù)據(jù)類型的變量可以互相賦值 基本數(shù)據(jù)類型 引用數(shù)據(jù)類型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包裝類

    2024年02月13日
    瀏覽(32)
  • java lambda表達(dá)式詳解

    java lambda表達(dá)式詳解

    我們知道,在Java中,接口是不能實(shí)例化的,但是接口對象可以指向它的實(shí)現(xiàn)類對象。如果接口連實(shí)現(xiàn)對象都沒有呢?那還可以使用匿名類的方式,如下: 復(fù)制 但是,使用匿名內(nèi)部的方式,代碼量其實(shí)并不是非常簡潔,而為了使代碼更加的簡潔,Java引進(jìn)了 Lambda 表達(dá)式的寫法,

    2024年02月03日
    瀏覽(34)
  • Java學(xué)習(xí)——lambda表達(dá)式

    Java學(xué)習(xí)——lambda表達(dá)式

    什么是Lambda表達(dá)式? 可以將Lambda表達(dá)式理解為一個匿名函數(shù); Lambda表達(dá)式允許將一個函數(shù)作為另外一個函數(shù)的參數(shù); 我們可以把 Lambda 表達(dá)式理解為是一段可以傳遞的代碼(將代碼作為實(shí)參),也可以理解為函數(shù)式編程, 將一個函數(shù)作為參數(shù)進(jìn)行傳遞 。 為什么要引入Lambda表

    2024年02月04日
    瀏覽(38)
  • Java中的lambda表達(dá)式

    Java中的lambda表達(dá)式

    目錄 一、背景 二、lambada表達(dá)式的基本使用 三、變量捕獲 四、lambda在集合中的使用(map和set) 五、優(yōu)缺點(diǎn) 一、背景 (1)、lambda表達(dá)式的定義: (2)、lambda表達(dá)式的語法: (3)、函數(shù)式接口 二、lambada表達(dá)式的基本使用 (1)沒有使用lambda表達(dá)式,簡單調(diào)用函數(shù)式接口展

    2024年02月08日
    瀏覽(23)
  • Java 8 Lambda表達(dá)式詳解

    在Java 8中,引入了一種全新的函數(shù)編程概念,即Lambda表達(dá)式。這是一個重要的進(jìn)步,它讓Java的功能得以大幅擴(kuò)展,同時還讓代碼變得更加簡潔明了。接下來,我將詳細(xì)介紹Lambda表達(dá)式的相關(guān)知識,包括其基本語法、使用場景和特性。 Lambda表達(dá)式基本的語法可以分為三個部分

    2024年02月08日
    瀏覽(48)
  • 淺談 Java 中的 Lambda 表達(dá)式

    淺談 Java 中的 Lambda 表達(dá)式

    更好的閱讀體驗(yàn) huge{color{red}{更好的閱讀體驗(yàn)}} 更好的閱讀體驗(yàn) Lambda 表達(dá)式是一種匿名函數(shù),它可以作為參數(shù)傳遞給方法或存儲在變量中。在 Java8 中,它和函數(shù)式接口一起,共同構(gòu)建了函數(shù)式編程的框架。 函數(shù)式編程是一種編程范式,也是一種思想。 它將計(jì)算視為函數(shù)求

    2024年02月11日
    瀏覽(37)
  • Java新特性:Lambda表達(dá)式

    Java新特性:Lambda表達(dá)式

    Java新特性:Lambda表達(dá)式 Lambda 表達(dá)式(Lambda expression),也可稱為閉包(Closure),是 Java(SE)8 中一個重要的新特性。Lambda 表達(dá)式允許我們通過表達(dá)式來代替功能接口。Lambda 表達(dá)式就和方法一樣,它提供了一個正常的參數(shù)列表和一個使用這些參數(shù)的主體(body,可以是一個表

    2024年02月13日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包