JAVA 8 新特性 – 集合遍历之forEach
我们知道java 中的集合有两种形式:Collection、Map<K,V>
-
Collection类型集合
java7中对Collection的遍历有以下几种形式:
List<String> list = Arrays.asList("a","b"); //普通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排序的写法是一样的:
Collection.sort(list, new Comparator<String>{ @Override public int compare(String o1, String o2){ return o1.compareTo(o2); } });
针对以上forEach遍历和sort排序,可以使用La’mbda表达式来简化代码:
list.forEach(str-> System.out.println(str));
Collections.sort(list,(o1,o2)->{return o1.compareTo(o2);});
-
Map类型集合
在java7中遍历有下面几种方式:
Map<String,String> map = new HashMap<>(); map.put("id","1"); map.put("name","laoming"); map.put("age","50"); 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));
注: 例子中出现的Consumer和BiConsumer是JAVA8中新增的函数式接口,Consumer接口中只有一个无返回结果并且只有一个泛型参数的方法;