JAVA8新特性--集合遍历之forEach

原创 2018年04月15日 15:37:45

java中的集合有两种形式Collection<E>,Map<K,V>

  • Collection类型集合
    在JAVA7中遍历有一下几种方式:
List<String> list = Arrays.asList("aaaa","bbbb");
//for循环
for (int i=0;i< list.size();i++){
    System.out.println(list.get(i));
}

//增强for循环
for(String str : list){
    System.out.println(str);
}
//迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
    System.out.println(iterator.next());
}

在JAVA8中还可以使用forEach来遍历:

list.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});

发现和使用sort排序的写法是一样的:

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});

发现代码量没有减少多少,那么我们在加上Lambda表达式,如下:

list.forEach(str-> System.out.println(str));

sort排序也使用Lambda表达式,如下:

Collections.sort(list,(o1,o2)->{return  o1.compareTo(o2);});
  • Map类型集合
    在JAVA7中遍历有下面几种方式:
Map<String,String> map = new HashMap<>();
map.put("id","11");
map.put("name","zhangsan");
map.put("age","30");
for (Map.Entry<String,String> entry : map.entrySet()){
    System.out.println("k=" + entry.getKey() + ",v=" + entry.getValue());
}
for (String key : map.keySet()){
    System.out.println("k=" + key + ",v=" + map.get(key));
}
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
    Map.Entry<String, String> entry = iterator.next();
    System.out.println("k=" + entry.getKey() + ",v=" + entry.getValue());
}
for (String v : map.values()){
    System.out.println("v=" + v);
}

使用JAVA8的forEach遍历,如下:

map.forEach(new BiConsumer<String, String>() {
    @Override
    public void accept(String s, String s2) {
        System.out.println("k=" + s + ",v=" + s2);
    }
});

也可以使用Lambda表达式,如下:

map.forEach((k,v)-> System.out.println("v="+k+",v="+v));

本文中只使用forEach,没有使用JAVA8的Stream包。
注:例子中出现的ConsumerBiConsumer是JAVA8中新增的函数式接口,Consumer接口中只有一个无返回结果并且只有一个泛型参数的方法,源码如下:

这里写图片描述

BiConsumer接口中提供的是一个无返回结果并且有两个泛型参数的方法,源码如下:
这里写图片描述

Java8新特性之forEach+Lambda 表达式遍历Map和List

这是Java8系列的第二篇,今天来说一下Java8中forEach的简单使用。我们使用对比的方式来看应该会看得更加清楚,更能理解: 一、遍历Map============Java8之前的方式====...
  • qq_26718271
  • qq_26718271
  • 2017-04-20 12:18:32
  • 15575

jdk1.8 新特性之 forEach 循环遍历

常规情况下我们基本都是这么写的List numbers = new ArrayList();//no.1 for(Integer number : numbers){ System.out.p...
  • dounine
  • dounine
  • 2016-11-26 23:10:23
  • 14365

java8函数式编程之三:集合中新增的方法:forEach

java 1.5的时候增加foreach的增强for循环,然而这里的forEach并不是那个foreach,该处谈论的foreach是集合类的父接口iterable中在jdk1.8新增加的foreac...
  • englishsname
  • englishsname
  • 2017-01-07 17:01:33
  • 2857

java.util.ArrayList在foreach循环遍历时删除元素的问题

http://rongmayisheng.com/post/%E7%A0%B4%E9%99%A4%E8%BF%B7%E4%BF%A1java-util-arraylist%E5%9C%A8foreac...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2015-11-23 11:06:53
  • 1446

在java8中你可以使用 foreach + Lambda拉姆达表达式遍历

package com.qn.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i...
  • qiunian144084
  • qiunian144084
  • 2017-11-30 21:23:35
  • 432

java8提供的新遍历java.lang.Iterable.forEach

java8提供了循环的新方式 以下是几个示例,运行结果就不贴出来了,就是循环显示String[] a = { "17", "52", "33", "412", "59", "62", "71" };...
  • u014314578
  • u014314578
  • 2015-04-16 10:26:29
  • 4577

Java8使用lambda表达式写的一个List,Set,Map遍历工具类

使用感觉就是,麻雀虽小五脏俱全.. 本代码非jdk1.8不支持,首先先定义几个functionInterface: @FunctionalInterface public interface Bean...
  • leiyong0326
  • leiyong0326
  • 2016-07-26 14:47:29
  • 5374

JDK8的ParallelStream遍历无序的问题

ParallelStream其实就是一个并行执行的流.它通过默认的ForkJoinPool,可能提高你的多线程任务的速度. Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务...
  • u011051912
  • u011051912
  • 2017-08-10 15:10:13
  • 547

集合遍历:for VS foreach

假设我们拥有下面的集合 1            System.Collections.ArrayList list = new System.Collections.ArrayList();2  ...
  • shyleoking
  • shyleoking
  • 2007-02-15 22:39:00
  • 1477

使用foreach遍历集合元素

1 代码示例 import java.util.*; public class ForeachTest { public static void main(String[] args) ...
  • chengqiuming
  • chengqiuming
  • 2017-04-12 09:44:03
  • 1210
收藏助手
不良信息举报
您举报文章:JAVA8新特性--集合遍历之forEach
举报原因:
原因补充:

(最多只允许输入30个字)