首頁  >  問答  >  主體

java - Stream.map()方法是保持原有顺序么?还是会重新排序呢?

PHP中文网PHP中文网2712 天前1311

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-18 10:12:56

    您好,非並發流情況下,stream的map方法的處理順序依賴於流的當前處理上游集合的順序,ArrayList的順序預設為自然順序(插入順序),因此ArrayList集合轉為的流的map方法能夠以自然順序處理集合元素。

    // 输出c b a
    List<String> a = new LinkedList<String>();
    a.add("c");
    a.add("b");
    a.add("a");
    a.stream().map(x -> {
      System.out.println(x);
      return x;
    }).count();
    
    Map<String,String> m = new HashMap<String,String>();
    m.put("4","D");
    m.put("2","B");
    m.put("1","A");
    m.put("3","C");
    // m.values() 默认顺序为A B C D
    // 因此stream map的处理顺序也是 A B C D
    m.values().stream().map(x -> {
                        System.out.println(x);
                        return x;
                    }).count();

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 10:12:56

    map 映射,這個跟排序沒有任何關係。

    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    
    list.stream().map((Function<String, Object>) s -> s + "1").forEach(System.out::println);
    // output:
    // A1
    // B1

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:12:56

    parallelStream不保證順序,streamp保證順序

    回覆
    0
  • 取消回覆