91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中stream處理map與flatMap時有什么區別

發布時間:2021-03-22 09:09:37 來源:億速云 閱讀:197 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java中stream處理map與flatMap時有什么區別,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

共同點和區別

首先看一下源代碼

  <R> Stream<R> map(Function<? super T, ? extends R> mapper);
   <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

共同點

  • 都是依賴stream進行轉換,結合lambda的入參和返回值,將一個類型依據程序邏輯轉換成另一種類型。

  • 最后結果返回都還是一個流,還可以對其進行繼續的流式處理或者進行收集。

區別

  • 方法參數不同,第一個參數是一樣的,但是第二個不一樣,對于map第二個參數沒啥要求,但是使用flatMap時,第二個參數還得用流來接收。

  • 所以flatMap多用于多對多,一對多,也就是map是將一個數據流中的一個數據節點,映射成另外一個數據節點,而flatMap是將一個數據流中的一個數據節點映射成另外一個數據流,這個另外的數據流可以是一個數據節點也可以是多個數據節點。

  • flatmap既可以單一轉換也可以一對多/多對多轉換,flatmap要求返回Observable,因此可以再內部進行from/just的再次事件分發,一一取出單一對象(轉換對象的能力不同)

使用案例

比如我們使用map將一個per對象映射成一個字符串對象

  static class Per {
    public String name;
    public int age;

    public Per(String name, int age) {
      this.name = name;
      this.age = age;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }

    @Override
    public String toString() {
      return "Per{" +
          "name='" + name + '\'' +
          ", age=" + age +
          '}';
    }
  }

  public static void main(String[] args) {
    List<Per> list = new ArrayList<>();
    list.add(new Per("listen", 22));
    list.add(new Per("bike", 24));
    list.add(new Per("milk", 27));

    List<String> collect = list.stream().map(Per::toString).collect(Collectors.toList());

    System.out.println(list);
    System.out.println("---");
    System.out.println(collect);

  }

一對一可以實現,那我們該需求,假設一個per人有多個孩子,我們想獲取這多個孩子,使用map可以實現嗎?比如下面代碼。

  static class Child {
    public String name;
    public int age;

    public Child(String name, int age) {
      this.name = name;
      this.age = age;
    }
        @Override
    public String toString() {
      return "Child{" +
          "name='" + name + '\'' +
          ", age=" + age +
          '}';
    }
  }

  static class Per {
    public String name;
    public int age;
    public Child[] Children;

    public Per(String name, int age) {
      this.name = name;
      this.age = age;
    }

    public Child[] getChildren() {
      return Children;
    }

    public void setChildren(Child[] children) {
      Children = children;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }

    @Override
    public String toString() {
      return "Per{" +
          "name='" + name + '\'' +
          ", age=" + age +
          '}';
    }
  }

這個時候注意這個孩子是多個,我們用的是數組存儲。如果此時我們還用map,那么只能接受每個per的孩子數組,不能和我們所愿接受每個孩子。

  public static void main(String[] args) {
    List<Per> list = new ArrayList<>();
    Per per1 = new Per("Listen", 22);
    per1.setChildren(new Child[] {new Child("a", 1), new Child("b", 2)});
    Per per2 = new Per("Milk", 26);
    per2.setChildren(new Child[] {new Child("c", 1), new Child("d", 2)});
    list.add(per1);
    list.add(per2);

    List<Child[]> collect = list.stream().map(Per::getChildren).collect(Collectors.toList());
    collect.forEach(item -> System.out.println(Arrays.toString(item)));
  }

而使用flatMap就可以實現。

  public static void main(String[] args) {
    List<Per> list = new ArrayList<>();
    Per per1 = new Per("Listen", 22);
    per1.setChildren(new Child[] {new Child("a", 1), new Child("b", 2)});
    Per per2 = new Per("Milk", 26);
    per2.setChildren(new Child[] {new Child("c", 1), new Child("d", 2)});
    list.add(per1);
    list.add(per2);

    List<Child> collect = list.stream().flatMap(item -> Arrays.stream(item.getChildren())).collect(Collectors.toList());
    System.out.println(collect);

  }

關于“Java中stream處理map與flatMap時有什么區別”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 互助| 台湾省| 海城市| 始兴县| 柳江县| 沙湾县| 华安县| 枞阳县| 南宫市| 托克逊县| 讷河市| 天镇县| 瑞昌市| 西乌| 仙桃市| 威宁| 民权县| 巴塘县| 上犹县| 乾安县| 乌恰县| 松阳县| 盐山县| 定陶县| 西贡区| 兴和县| 长丰县| 嘉善县| 云和县| 昌乐县| 昭平县| 望谟县| 赫章县| 澄江县| 望城县| 通城县| 张家港市| 通榆县| 新乡县| 土默特左旗|