亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java9 Stream Collectors新增功能(小結)

 更新時間:2019年12月24日 14:57:13   作者:KOFKING  
這篇文章主要介紹了Java9 Stream Collectors新增功能(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Java 9 Stream Collectors新增功能

Java 8 引入Collectors,用于累加輸入元素至可變的容器如,Map、List以及Set。本文看看Java 9 新增的兩個Collectors:Collectors.filtering 和 Collectors.flatMapping,主要用于和 Collectors.groupingBy 一起提供智能的元素集合.

Collectors.filtering方法

Collectors.filtering方法類似于Stream filter()方法,后者用于過濾輸入元素,但兩者的使用場景不同。Stream filter()在stream鏈接方法中使用,而Collectors.filtering方法被設計和 groupingBy一起使用。

Stream filter()首先過濾元素,然后再分組。被過濾的值被丟棄無法被追溯跟蹤。如果需要跟蹤需要先分組然后再過濾,這正是 Collectors.filtering能做的。

Collectors.filtering帶函數參數用于過濾輸入參數,然后收集過濾元素:

@Test
public void givenList_whenSatifyPredicate_thenMapValueWithOccurences() {

List<Integer> numbers = List.of(1, 2, 3, 5, 5);

Map<Integer, Long> result = numbers.stream()
 .filter(val -> val > 3)
 .collect(Collectors.groupingBy(i -> i, Collectors.counting()));

assertEquals(1, result.size());

result = numbers.stream()
 .collect(Collectors.groupingBy(i -> i,
  Collectors.filtering(val -> val > 3, Collectors.counting())));

assertEquals(4, result.size());
}

Collectors.flatMapping方法

Collectors.flatMapping類似于Collectors.mapping 方法,但粒度更細。兩者都帶一個函數和一個收集器參數用于收集元素,但flatMapping函數接收元素流,然后通過收集器進行累積操作。首先我們看模型類:

class Blog {

private String authorName;
private List<String> comments = new ArrayList<>();

public Blog(String authorName, String ... comment){
  this.authorName = authorName;
  comments.addAll(Arrays.asList(comment));
}

public String getAuthorName(){
  return this.authorName;
}

public List<String> getComments(){
  return comments;
}
}

Collectors.flatMapping 方法跳過中間集合,直接寫至單個有Collectors.groupingBy定義的組映射容器中:

@Test
public void givenListOfBlogs_whenAuthorName_thenMapAuthorWithComments() {

Blog blog1 = new Blog("1", "Nice", "Very Nice");
Blog blog2 = new Blog("2", "Disappointing", "Ok", "Could be better");
List<Blog> blogs = List.of(blog1, blog2);
   
Map<String, List<List<String>>> authorComments1 = blogs.stream()
 .collect(Collectors.groupingBy(Blog::getAuthorName, 
  Collectors.mapping(Blog::getComments, Collectors.toList())));
  
assertEquals(2, authorComments1.size());
assertEquals(2, authorComments1.get("1").get(0).size());
assertEquals(3, authorComments1.get("2").get(0).size());

Map<String, List<String>> authorComments2 = blogs.stream()
 .collect(Collectors.groupingBy(Blog::getAuthorName, 
  Collectors.flatMapping(blog -> blog.getComments().stream(), 
  Collectors.toList())));

assertEquals(2, authorComments2.size());
assertEquals(2, authorComments2.get("1").size());
assertEquals(3, authorComments2.get("2").size());
}

Collectors.mapping映射所有分組(作者的評論)值收集的器容器中,如List。并且刪除中間集合,直接存儲集合至收集器的容器。

總結

本文介紹Java 9 提供Collectors新的方法。Collectors.filtering() 和 Collectors.flatMapping() ,一般和Collectors.groupingBy() 一起使用。

這些收集器也可以與collector.partitioningby()一起使用,但是僅根據條件創(chuàng)建兩個分區(qū),收集器的實際功能并沒有得到利用;因此在本教程中沒有提到。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring Security 在 Spring Boot 中的使用詳解【集中式】

    Spring Security 在 Spring Boot 中的使用詳解【集中式】

    這篇文章主要介紹了Spring Security 在 Spring Boot 中的使用【集中式】,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 詳解Mybatis 傳遞參數類型為List的取值問題

    詳解Mybatis 傳遞參數類型為List的取值問題

    這篇文章主要介紹了詳解Mybatis 傳遞參數類型為List的取值問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 2020 IDEA安裝教程與激活(idea2020激活碼)

    2020 IDEA安裝教程與激活(idea2020激活碼)

    這篇文章主要介紹了2020 IDEA安裝教程與激活(idea2020激活碼),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • springboot斷言異常封裝與統(tǒng)一異常處理實現(xiàn)代碼

    springboot斷言異常封裝與統(tǒng)一異常處理實現(xiàn)代碼

    異常處理其實一直都是項目開發(fā)中的大頭,但關注異常處理的人一直都特別少,下面這篇文章主要給大家介紹了關于springboot斷言異常封裝與統(tǒng)一異常處理的相關資料,需要的朋友可以參考下
    2023-01-01
  • feign如何打印出http請求

    feign如何打印出http請求

    這篇文章主要介紹了feign如何打印出http請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringCloud輪詢拉取注冊表與服務發(fā)現(xiàn)流程詳解

    SpringCloud輪詢拉取注冊表與服務發(fā)現(xiàn)流程詳解

    這篇文章主要介紹了SpringCloud輪詢拉取注冊表與服務發(fā)現(xiàn),現(xiàn)在很多創(chuàng)業(yè)公司都開始往springcloud靠了,可能是由于文檔和組件比較豐富的原因吧,畢竟是一款目前來說比較完善的微服務架構
    2022-11-11
  • maven之packaging標簽的使用

    maven之packaging標簽的使用

    這篇文章主要介紹了maven之packaging標簽的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Netty解決 TCP 粘包拆包的方法

    Netty解決 TCP 粘包拆包的方法

    處理粘包的唯一方法就是制定應用層的數據通訊協(xié)議,通過協(xié)議來規(guī)范現(xiàn)有接收的數據是否滿足消息數據的需要,本文給大家介紹Netty解決 TCP 粘包拆包的方法,需要的朋友一起看看吧
    2021-07-07
  • Java轉換解析中間帶有 “T“和“Z“ 的時間格式

    Java轉換解析中間帶有 “T“和“Z“ 的時間格式

    這篇文章主要給大家介紹了關于Java轉換解析中間帶有 “T“和“Z“ 的時間格式,相信很多小伙伴在時間格式轉換的時候非常頭疼,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Maven坐標和依賴的實現(xiàn)示例

    Maven坐標和依賴的實現(xiàn)示例

    本文主要介紹了Maven坐標和依賴的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04

最新評論