我们先看一个forEach()方法遍历List集合的例子:

        //使用com.google.guava包创建集合List<String> list =Lists.newArrayList("a","b","c","d");//遍历1  其中anyThing可以用其它字符替换list.forEach((anyThing)->System.out.println(anyThing));//遍历2list.forEach(any->System.out.println(any));//匹配输出 : "b"list.forEach(item->{if("b".equals(item)){System.out.println(item);}});

我们看一下forEach()的实现:

public interface Iterable<T> {Iterator<T> iterator();default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}default Spliterator<T> spliterator() {return Spliterators.spliteratorUnknownSize(iterator(), 0);}
}

可以看到:forEach()方法是Iterable<T>接口中的一个方法。Java容器中,所有的Collection子类(List、Set)会实现Iteratable接口以实现foreach功能。forEach()方法里面有个Consumer类型,它是Java8新增的一个消费型函数式接口,其中的accept(T t)方法代表了接受一个输入参数并且无返回的操作。

@FunctionalInterface
public interface Consumer<T> {/* 接收单个参数,返回为空 */void accept(T t);default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
}

我们可以这样使用Consumer接口

public class Test {//自定义一个test方法public static void test(int value, Consumer<Integer> consumer) {consumer.accept(value);}public static void main(String[] args) {//这里,Consumer消费型函数式接口代表了接受一个输入参数并且无返回的操作//(x) -> System.out.println(x * 2)代表接受一个输入参数x,这里 x=3//可以使用lambda表达式,输出结果为6test(3, (x) -> System.out.println(x * 2));}
}

forEach()方法同样可以遍历存储其它对象的List集合:

        List<User> list =Lists.newArrayList(new User("aa",10),new User("bb",11),new User("cc",12));//遍历  其中any可以用其它字符替换// list.forEach(any->System.out.println(any));//匹配输出,匹配项可以为list集合元素的属性(成员变量)list.forEach(any->{if(new User("bb",11).equals(any)){System.out.println(any);}});}

map集合不属于Collection,它有自己的foreach()方法:

    default void forEach(BiConsumer<? super K, ? super V> action) {Objects.requireNonNull(action);for (Map.Entry<K, V> entry : entrySet()) {K k;V v;try {k = entry.getKey();v = entry.getValue();} catch(IllegalStateException ise) {// this usually means the entry is no longer in the map.throw new ConcurrentModificationException(ise);}action.accept(k, v);}}

使用:

        Map<String,User> map =new HashMap<>();map.put("1",new User("aa",10));map.put("2",new User("bb",11));map.put("3",new User("cc",12));//匹配输出,匹配项可以为list集合元素的属性(成员变量)map.forEach((t,v)->System.out.println("id : " + t + " User : " + v));

Java 集合List及Map中forEach()方法相关推荐

  1. JAVA 通过value获取Map中key的三种方法

    JAVA 通过value获取Map中key的三种方法 简介 方法描述 循环法 Stream方法 Apache Commons Collections的BidiMap 总结 简介 我们都知道Map是存放 ...

  2. Vue中构造数组数据-map和forEach方法梳理

    数组操作是前端最重要的数据操作,构造数组数据,又是数组操作中很常见的.本文将梳理下map和forEach方法在Vue项目中的使用. 想要深入理解这两个方法,一定要手写几次简易的实现,理解其中的要义.这 ...

  3. java 集合之Interface Map<K,V> HashMap实现类

    java 集合之Interface Map<K,V> 类型参数:K- 此映射所维护的键的类型:V- 映射值的类型 将键映射到值的对象. 一个映射不能包含重复的键: 每个键最多可以映射到一个 ...

  4. Java集合框架概述及Collection接口方法讲解

    Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容 ...

  5. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合

    I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...

  6. LINQ中ForEach方法的使用

    标签: linq 2016-06-25 12:47 409人阅读 评论(0) 收藏 举报分类: LINQ(5) 我の原创(113) 版权声明:本文为博主原创文章,未经博主允许不得转载.LINQ中For ...

  7. java学习(尚硅谷)集合之Collection接口中的方法

    又是好几天没有学Java了,今天下午睡了个觉状态很好,来到图书馆写了点C++的项目代码,写累了看了几集康师傅.笔记如下: Collection接口中的方法: package com.atguigu.j ...

  8. (Java集合框架)Map集合

    Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...

  9. Java集合(四):Map映射

    集是一个集合,它可以快速的查找现有的元素.但是,要查看一个元素,需要有要查找元素的精确副本.这不是一个非常通用的查找方式.通常,我们知道某些键的信息,并想要查找与之对应的元素.映射表(map)就是为此 ...

最新文章

  1. 基于form的身份验证怎样设置一个特例(使某页不需要验证)
  2. [css] 你是如何规划响应式布局的?
  3. 《啊哈算法》 解密 QQ 号 —— 队列(python实现)
  4. 2020下半年新机最新消息_三星小米华为苹果纷纷曝光高端机,这么多你选择谁?...
  5. 用户登录界面 - 记事本风格HTML代码
  6. 页眉中字数未满但自动换行
  7. Tomcat主页404错误
  8. mysql去重操作哪个最快_如何将 MySQL 去重操作优化到极致?| CSDN 博文精选
  9. Java中继承和面向接口的编程
  10. UI——day16.交互设计(一)
  11. 切换不了摄像头 高拍仪_高拍仪常见问题解答
  12. 【Android】实现应用简单的用户登录界面
  13. ORA-01438:value larger than specified precision allowed for this column
  14. Linux日志切割工具logrotate原理和配置详解
  15. ImageView 加载本地(手机)图片
  16. 软件测试基础 按照测试对象划分 界面测试(UI测试.响应式页面 可靠性测试 容错性测试 文档测试 平台测试 易用性测试等
  17. 2019ubc转学分计算机科学gpa,吐血整理2019年本科转学分申请UBC
  18. FileZilla文件传输失败问题
  19. 计算广告(1)---一些概念
  20. 3.司马懿(长寿)、2.贾羽(善终)、1曹操(枭雄)

热门文章

  1. BLE--GATT服务构成
  2. 《JavaScript高级程序设计》读书笔记 【8章~】【持更】
  3. Delphi7开发的软件运行中出现随机偶发Access violation at address
  4. XTransfer外贸收款账户和传统收款账户的区别?
  5. 渗透测试-SSRF服务端请求伪造(Server-Side Request Forgery)
  6. 微信开放平台分享功能的app签名怎么获取
  7. 2022 Cloud Native Computing代表厂商 | 灵雀云第三次入选Gartner中国ICT技术成熟度曲线报告
  8. 【VoLTE】增强型4GLTE开关默认处于关闭状态如何实现
  9. ofstream的使用方法--超级精细
  10. 集合、Collection、List