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

Java 8 新特性——Lambda 表達(dá)式(2)

這篇具有很好參考價(jià)值的文章主要介紹了Java 8 新特性——Lambda 表達(dá)式(2)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?一、Java Stream API

????????Java Stream函數(shù)式編程接口最初在Java 8中引入,并且與 lambda 一起成為Java開(kāi)發(fā)里程碑式的功能特性,它極大的方便了開(kāi)放人員處理集合類(lèi)數(shù)據(jù)的效率。

Java 8 新特性——Lambda 表達(dá)式(2),Java后端,java,后端

????????Java Stream就是一個(gè)數(shù)據(jù)流經(jīng)的管道,并且在管道中對(duì)數(shù)據(jù)進(jìn)行操作,然后流入下一個(gè)管道。有學(xué)過(guò)linux 管道的同學(xué)應(yīng)該會(huì)很容易就理解。在沒(méi)有Java Stram之前,對(duì)于集合類(lèi)的操作,更多的是通過(guò)for循環(huán)。大家從后文中就能看出Java Stream相對(duì)于for 循環(huán)更加簡(jiǎn)潔、易用、快捷。

????????管道的功能包括:Filter(過(guò)濾)、Map(映射)、sort(排序)等,集合數(shù)據(jù)通過(guò)Java Stream管道處理之后,轉(zhuǎn)化為另一組集合或數(shù)據(jù)輸出。

二、Stream API代替for循環(huán)

先來(lái)看一個(gè)例子:

List<String> nameStrs = Arrays.asList("Monkey", "Lion", "Giraffe","Lemur");

List<String> list = nameStrs.stream()
        .filter(s -> s.startsWith("L"))
        .map(String::toUpperCase)
        .sorted()
        .collect(toList());
System.out.println(list);
  • 首先,我們使用Stream()函數(shù),將一個(gè)List轉(zhuǎn)換為管道流。
  • 調(diào)用filter函數(shù)過(guò)濾數(shù)組元素,過(guò)濾方法使用lambda表達(dá)式,以L開(kāi)頭的元素返回true被保留,其他的List元素被過(guò)濾掉。
  • 然后調(diào)用Map函數(shù)對(duì)管道流中每個(gè)元素進(jìn)行處理,字母全部轉(zhuǎn)換為大寫(xiě)。
  • 然后調(diào)用sort函數(shù),對(duì)管道流中數(shù)據(jù)進(jìn)行排序。默認(rèn)情況下,使用 sorted() 方法進(jìn)行排序時(shí),會(huì)按照自然順序進(jìn)行排序。對(duì)于字符串來(lái)說(shuō),自然順序即按照字母的升序進(jìn)行排序。sorted() 方法對(duì)轉(zhuǎn)換為大寫(xiě)形式后的字符串進(jìn)行排序。因?yàn)榇髮?xiě)字母的 Unicode 值小于相應(yīng)的小寫(xiě)字母,所以在排序時(shí)會(huì)先排列大寫(xiě)字母,然后是小寫(xiě)字母。
  • 最后調(diào)用collect函數(shù)toList,將管道流轉(zhuǎn)換為L(zhǎng)ist返回。

???????最終的輸出結(jié)果是:[LEMUR, LION]。

? ? ? ? 當(dāng)然如果想要根據(jù)其他規(guī)則進(jìn)行排序,可以使用 sorted(Comparator) 方法,并提供一個(gè)自定義比較器來(lái)指定排序的規(guī)則。比如可以使用 sorted((str1, str2) -> str1.length() - str2.length()) 來(lái)按字符串長(zhǎng)度進(jìn)行排序。

import java.util.Comparator;

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        return str1.length() - str2.length();
    }
}

????????創(chuàng)建了一個(gè)名為 StringLengthComparator 的類(lèi),它實(shí)現(xiàn)了 Comparator<String> 接口。這個(gè)接口要求我們實(shí)現(xiàn) compare 方法來(lái)定義元素之間的排序規(guī)則。

????????在 compare 方法中,使用 str1.length() - str2.length() 來(lái)比較兩個(gè)字符串的長(zhǎng)度。如果 str1 的長(zhǎng)度小于 str2 的長(zhǎng)度,返回一個(gè)負(fù)值。如果 str1 的長(zhǎng)度大于 str2 的長(zhǎng)度,返回一個(gè)正值。如果 str1str2 的長(zhǎng)度相等,返回 0。通過(guò)傳遞 new StringLengthComparator()sorted() 方法,可以按照字符串長(zhǎng)度進(jìn)行排序。

List<String> sortedList = nameStrs.stream()
        .filter(s -> s.startsWith("L"))
        .map(String::toUpperCase)
        .sorted(new StringLengthComparator())
        .collect(Collectors.toList());

System.out.println(sortedList);

?????????當(dāng)然,使用Java 8之前的方法來(lái)實(shí)現(xiàn)對(duì)一個(gè)string列表進(jìn)行排序:

List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

????????使用 Lambda 表達(dá)式后的效果是:

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});
// 只有一條邏輯語(yǔ)句,可以省略大括號(hào)
Collections.sort(names, (String a, String b) -> b.compareTo(a));
// 可以省略入?yún)㈩?lèi)型
Collections.sort(names, (a, b) -> b.compareTo(a));

三、將數(shù)組轉(zhuǎn)換為管道流

????????使用Stream.of()方法,將數(shù)組轉(zhuǎn)換為管道流。

String[] array = {"Monkey", "Lion", "Giraffe", "Lemur"};
Stream<String> nameStrs2 = Stream.of(array);

Stream<String> nameStrs3 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");

四、將集合類(lèi)對(duì)象轉(zhuǎn)換為管道流

????????通過(guò)調(diào)用集合類(lèi)的stream()方法,將集合類(lèi)對(duì)象轉(zhuǎn)換為管道流。

List<String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
Stream<String> streamFromList = list.stream();

Set<String> set = new HashSet<>(list);
Stream<String> streamFromSet = set.stream();

五、將文本文件轉(zhuǎn)換為管道流

????????通過(guò)Files.lines方法將文本文件轉(zhuǎn)換為管道流,Paths.get()方法作用就是獲取文件,是Java NIO的API也就是說(shuō):我們可以很方便的使用Java Stream加載文本文件,然后逐行的對(duì)文件內(nèi)容進(jìn)行處理。

Stream<String> lines = Files.lines(Paths.get("file.txt"));

六、轉(zhuǎn)換成流后面的操作

????????一旦將數(shù)組或一組值轉(zhuǎn)換為流,你就可以使用流的各種操作方法對(duì)其進(jìn)行處理和操作。下面是一些示例操作:

①、遍歷流中的元素:

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur"); 
nameStrs2.forEach(System.out::println);

②、過(guò)濾流中的元素:

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
Stream<String> filteredStream = nameStrs2.filter(s -> s.startsWith("L"));

③、對(duì)流中的元素進(jìn)行轉(zhuǎn)換:

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
Stream<String> upperCaseStream = nameStrs2.map(String::toUpperCase);

?④、對(duì)流中的元素進(jìn)行排序:

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
Stream<String> sortedStream = nameStrs2.sorted();

⑤、對(duì)流中的元素進(jìn)行聚合操作:

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
Optional<String> longestString = nameStrs2.max(Comparator.comparingInt(String::length));

?⑥、收集流中的元素到集合中:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-680851.html

Stream<String> nameStrs2 = Stream.of("Monkey", "Lion", "Giraffe", "Lemur");
List<String> stringList = nameStrs2.collect(Collectors.toList());

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

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

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

相關(guān)文章

  • 【Java系列】JDK 1.8 新特性之 Lambda表達(dá)式

    【Java系列】JDK 1.8 新特性之 Lambda表達(dá)式

    Lambda是一個(gè)匿名函數(shù),我們可以將Lambda表達(dá)式理解為一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣傳遞)。使用它可以寫(xiě)出簡(jiǎn)潔、靈活的代碼。作為一種更緊湊的代碼風(fēng)格,使java語(yǔ)言表達(dá)能力得到提升。 結(jié)果: ?19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是沒(méi)有使用Lambda表

    2024年02月22日
    瀏覽(27)
  • Java8新特性1——函數(shù)式接口&lambda表達(dá)式

    注:以下內(nèi)容基于Java 8,所有代碼都已在Java 8環(huán)境下測(cè)試通過(guò) 目錄: Java8新特性1——函數(shù)式接口lambda表達(dá)式 Java8新特性2——方法引用 Java8新特性3——Stream 如果在一個(gè)接口中, 有且只有一個(gè)抽象方法 ,則該接口被稱為函數(shù)式接口。如: 注: 可以在接口前使用 @FunctionalInt

    2024年02月10日
    瀏覽(48)
  • Java—JDK8新特性—Lambda表達(dá)式【內(nèi)含思維導(dǎo)圖】

    Java—JDK8新特性—Lambda表達(dá)式【內(nèi)含思維導(dǎo)圖】

    目錄 JDK8新特性 2.Lambda表達(dá)式 思維導(dǎo)圖 2.1?什么是Lambda表達(dá)式 2.2 為什么使用Lamdba表達(dá)式 2.3 Lambda表達(dá)式基本語(yǔ)法 2.4 類(lèi)型推斷 2.5 Lambda練習(xí) 2.6 Lambda常用場(chǎng)景 ????????官網(wǎng)提供網(wǎng)址:JDK 8 Features ????????Lamdba是一個(gè) 匿名函數(shù) ,可以把Lamdba表達(dá)式理解為是一段可以傳遞的

    2024年02月03日
    瀏覽(27)
  • Java 8及以上新特性:Lambda表達(dá)式、Stream API、Optional類(lèi)與接口默認(rèn)方法(四)

    目錄 一、接口默認(rèn)方法 1.1 概念解析: 1.2 應(yīng)用場(chǎng)景: 1.3 使用注意事項(xiàng): 1.4 使用示例: 二、結(jié)論 1.1 總結(jié)Java 8及以上版本四大新特性的重要意義與價(jià)值: 1.2 鼓勵(lì)讀者積極學(xué)習(xí)并運(yùn)用這些新特性: 1.3 對(duì)未來(lái)Java版本可能引入的新特性進(jìn)行展望: 1.1 概念解析: 接口默認(rèn)方法

    2024年04月13日
    瀏覽(30)
  • java學(xué)習(xí)路程之篇三、進(jìn)階知識(shí)、面向?qū)ο蟾呒?jí)、接口新特性、代碼塊、內(nèi)部類(lèi)、Lambda表達(dá)式、窗體、組件、事件

    概述 生成值類(lèi)型響應(yīng)式數(shù)據(jù) 通過(guò) .value 值修改 生成對(duì)象和數(shù)組類(lèi)型的響應(yīng)式對(duì)象選用 reactive 方式比較好 html JavaScript 概述 reactive 方法根據(jù)傳入的對(duì)象,創(chuàng)建返回一個(gè)深度響應(yīng)式對(duì)象。響應(yīng)式對(duì)象看起來(lái)和傳入的對(duì)象一樣。但是,響應(yīng)式對(duì)象屬性值改動(dòng),不管層級(jí)有多深,都

    2024年02月16日
    瀏覽(21)
  • 進(jìn)階JAVA篇- Lambda 表達(dá)式與 Lambda 表達(dá)式的省略規(guī)則

    進(jìn)階JAVA篇- Lambda 表達(dá)式與 Lambda 表達(dá)式的省略規(guī)則

    目錄 ? ? ? ? 1.0 什么是 Lambda 表達(dá)式? ? ? ? ? 1.1 既然跟匿名內(nèi)部類(lèi)相關(guān),先來(lái)回顧匿名內(nèi)部類(lèi)。 ? ? ? ? ?1.2 Lambda 表達(dá)式與匿名內(nèi)部類(lèi)之間的關(guān)系。 ? ? ? ? 1.3 函數(shù)式接口 ? ? ? ? 1.4 在具體代碼中來(lái)操作一下 ? ? ? ? 2.0?Lambda 表達(dá)式省略規(guī)則 ??????? ?Lambda 表達(dá)

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

    目錄 一、Lambda簡(jiǎn)介 二、Lambda使用前提 三、Lambda語(yǔ)法 1.操作符 a.\\\"-\\\" ?b.\\\"::\\\" 2.格式? a.無(wú)參數(shù) b.有參數(shù) 四、Lambda演化過(guò)程 五、Lambda實(shí)現(xiàn)排序 Lambda 表達(dá)式,也可稱為閉包,它是推動(dòng) Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)

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

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

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

    Java Lambda 表達(dá)式

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

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

    Lambda表達(dá)式(JAVA)

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

    2024年02月08日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包