美文网首页
stream和for的对比

stream和for的对比

作者: ThinkingInDay | 来源:发表于2019-07-09 16:45 被阅读0次

    一、stream和for在下列情况的对比

    1.1: 显示集合中的每一个元素

           List<Integer> idList = new ArrayList();   idList.add(1); idList.add(2);

          for(Integer id:idList){System.out.print(id)}

          idList.stream().foreach(n -> System.out.print(n));

          或者:idList.stream().foreach(System.out::println)

    1.2:   过滤集合

        List<Integer> result = new ArrayList();

         for(Integer id:idList){

            if(id != 1){

                    result.add(id);

            }

         }

    result = idList.stream().filter(id ->{

        return !ObjectUtils.equals(id,1);

    }).collect(Collectors.toList());

    1.3:获取A集合中不在B集合中的元素

    List<Integer> result = new ArrayList();

    List<Integer> a = new ArrayList(); a.add(1);a.add(2);

    List<Integer> b = new ArrayList(); b.add(1);

    for(Integer aa:a){

     boolean flag = true;

    for(Integer bb:b){

         if(bb.equals(aa)){

              flag = false;

          }

        }

    if(flag){

    result.add(aa);

    }

    }

    result = a.stream().foreach(aa ->{

         return b.stream().noneMatch(bb ->{

             return bb.equals(aa);

       });

    }).collect(Collectors.toList());

    1.4:list转map

    for:定义map,循环判断list,得到

    stream:Map<Integer,string> map =list.stream().collect(Collectors.toMap(obj:getId,obj:getName));

    1.4.1:

    Map转list

    for:新增一个list,便利map

    stream():map.entryset().stream().sorted(Map.Entry.CompatingByKey()).map(e ->new Obj(e.getKey(),e.getValue()) ).collect(Collectors.toList);

    1.5:集合的求和

    for: for循环,每次取值相加

    stream(): integerlist.stream().mapToInt(str -> str).sum();

    1.6:集合的最值问题

    for:for循环,判断集合中最小和最大值

    stream():stList.stream().mapToInt(str -> str).max()/min()

    二、stream中map和peek的区别

    2.1:对于实体对象的集合而言:

    peek: 修改了对象中的属性值,返回的仍是对象集合;无return

           List<Student> result = stList.stream().peek(student -> {

           student.setName(student.getName() + "1");

          }).collect(Collectors.toList());

    map:修改了对象中的属性值,返回的仍是属性集合,有return,和实现有关

          List<String> result = stList.stream().map(student -> {

                return student.getName() +"1";

            }).collect(Collectors.toList());

    2.2 对于非实体对象的集合而言:

    List<Integer> stList = new ArrayList<>(2);

    stList.add(1);

    stList.add(2);

    map:

    List<Integer> mapList = stList.stream().map(i -> i).collect(Collectors.toList());

    peek:

    List<Integer> peekList = stList.stream().peek(i -> {

        i = i;

    }).collect(Collectors.toList()); ---------------没有区别

    三、总结

    3.1:stream实现集合的操作代码量少,简洁,for代码量大

    3.2 :stream实现集合的操作是并行的(多线程),for是串行的

    3.3:stream在数据量大的情况下效率高,for在数据量小的情况下效率高.

    相关文章

      网友评论

          本文标题:stream和for的对比

          本文链接:https://www.haomeiwen.com/subject/cbxzhctx.html