u011856283
你好杰米
采纳率95%
2018-08-07 06:40 阅读 8.5k
已采纳

【java8】请问一个ArrayList使用stream的map后,会保证原有顺序吗?

5

如题

List users = xxxxxxx;

假设User里面有3个数据,“a”“b”“c”

我使用users.stream().map....................toList

后,请问顺序还是abc么

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    qq_29777207 张音乐 2018-08-07 07:20
                    //顺序不变
            List collect = users.stream().map(String::toUpperCase).collect(Collectors.toList());
    
                    //顺序会变
                    List collect = users.parallelStream().map(String::toUpperCase).collect(Collectors.toList());
    
    
    点赞 2 评论 复制链接分享
  • ejiao1233 alunSemiconductor 2018-08-07 06:46

    是和否的问题,还是建议你直接代码运行试下就确定了,这样有助于你的学习

    点赞 1 评论 复制链接分享
  • qq_25261763 qq_25261763 2018-08-07 06:54

    对于有顺序的源数据,比如list,set,Stream操作之后仍然会按照顺序排(线性操作)。
    如果是非固定顺序的数据源,则不保证其最后处理的顺序。
    对于线性Streams,源的固定顺序对性能没有特别影响。
    对于并行Streams,不强调顺序的话显然性能会更好。比如filter,distinct,groupingBy操作,非顺序操作的效率就更好,可参考博客
    另外,如果数据本身是固定顺序的,但是开发者本身不在意是否按顺序处理,那么可以通过unordered()处理之后再操作,会提高某些有状态的并行操作和结束操作的效率。

    点赞 评论 复制链接分享
  • will200811 will200811 2018-08-07 07:04

    顺序不变。可以运行此代码。
    List users=Arrays.asList("x","b","c");
    for(int i=0;i System.out.println(users.get(i));
    }
    List collect = users.stream().map(String::toUpperCase).collect(Collectors.toList());
    for(int i=0;i<collect.size();i++){
    System.out.println(collect.get(i));
    }
    结果为 x b c, X B C

    点赞 评论 复制链接分享
  • weixin_42665191 筱~破^ 2018-08-08 02:41

    使用stream是顺序流 他是不会变化的除非你在后续操作中做了修改

    点赞 评论 复制链接分享
  • Zmmgz1208 Zmmgz1208 2018-08-08 08:14

    使用users.stream()......顺序不会发生改变

    点赞 评论 复制链接分享
  • qq_34272143 浮华蒲公英 2018-08-07 07:10

    ArrayList使用stream的map后,会保证原有顺序的,除非你添加了优先级或者插入数据

    点赞 评论 复制链接分享

相关推荐