stream和for的对比

2019-07-09  本文已影响0人  ThinkingInDay

一、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在数据量小的情况下效率高.

上一篇下一篇

猜你喜欢

热点阅读