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));
1
sort排序也使用Lambda表达式,如下:

Collections.sort(list,(o1,o2)->{return o1.compareTo(o2);});
1
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));
1
本文中只使用forEach,没有使用JAVA8的Stream包。
注:例子中出现的Consumer和BiConsumer是JAVA8中新增的函数式接口,Consumer接口中只有一个无返回结果并且只有一个泛型参数的方法,源码如下:

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

JAVA8新特性--集合遍历之forEach的更多相关文章

  1. Java8新特性——集合底层源码实现的改变

    ArrayList 源码分析: jdk7: ArrayList list = new ArrayList();//初始化一个长度为10的Object[] elementData sysout(list ...

  2. Java8新特性 集合的stream的map

    看该段代码(作用是把List中的对象替换): List<BlackMac> blackMacList = blackMacDao.queryBlackByMac(mac, (paginat ...

  3. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  4. Java8 新特性之集合操作Stream

    Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...

  5. [Java8教程]Java8新特性进阶集合

    Java8新特性进阶集合 基于 AOP 抽离方法的重复代码 Java8:当 Lambda 遇上受检异常 Java8:对字符串连接的改进 Java8:Java8 中 Map 接口的新方法 Java8:当 ...

  6. java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合

    java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...

  7. java8新特性全面解析

    在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...

  8. Java8新特性

    Java8新特性 Java8主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等. 1.函数式接口 Java 8 引入 ...

  9. Java8 新特性之Stream----java.util.stream

    这个包主要提供元素的streams函数操作,比如对collections的map,reduce. 例如: int sum = widgets.stream() .filter(b -> b.ge ...

随机推荐

  1. Ajax Jq Razor语句

    1.JS刷新当前页面: window.location.reload(); 2.JSon成功后转向其他页面: window.location.href="要转向页面的地址(一般格式:/页面所 ...

  2. FastDFS 搭建

    #FastDFS安装方式 安装必要插件:libevent  (此次搭建方案采用libevent 1.4.13)   wget http://fastdfs.googlecode.com/files/F ...

  3. React 复合组件

    var Avatar = React.createClass({ render: function() { return ( <div> <ProfilePic username={ ...

  4. 详解__FILE__与$_SERVER['SCRIPT_FILENAME']的区别

    废话不多说 直接上测试代码: <?php //引入的是ceshi4文件夹下的ceshi4.php; require_once './ceshi4/ceshi4.php'; 下面是ceshi4文件 ...

  5. python网络编程-socketserver模块

    使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...

  6. hibernate 注解不给提示

    1.alt + / 会给提示 2.上面这种稍微麻烦一点,如果需要写了@就直接给提示,就需要设置一下: a)Window - preferences b)搜 content assist,选中 Java ...

  7. 关于在Share point 2010 中保存SPFieldLookupValue类型到一个List中的问题

    在share point 中,有时字段的类型是lookup的,那么将会从另外的一个list中进行相应的连接,这是如果保存string等类型,将会报一个错, Invalid data has been ...

  8. 类型信息(RTTI和反射)——RTTI

    运行时类型信息可以让你在程序运行时发现和使用类型信息. 在Java中运行时识别对象和类的信息有两种方式:传统的RTTI,以及反射.下面就先来说下RTTI. 1.RTTI: RTTI:在运行时,识别一个 ...

  9. DIV命名规范

    DIV命名规范 企业DIV使用频率高的命名方法 网页内容类 --- 注释的写法: /* Footer */ 内容区/* End Footer */ 摘要: summary 箭头: arrow 商标:  ...

  10. Docker build 安装报错, Could not open requirments file: [Errno 2] No such file or directory:'requirements.txt'

    docker安装教程 https://docs.docker.com/get-started/part2/#build-the-app 相关帖子 https://stackoverflow.com/q ...