Java中 Map双列集合的遍历: Lambda表达式遍历 →forEach方法遍历双列集合 以及什么是函数式接口

本文主要是介绍Java中 Map双列集合的遍历: Lambda表达式遍历 →forEach方法遍历双列集合 以及什么是函数式接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1、使用 forEach 遍历双列结合
      • 2、什么是函数接口

1、使用 forEach 遍历双列结合

Map 接口中的 forEach 方法是Java 8引入的一个默认方法(default method)。其执行原理是通过遍历Map中的键值对,并对每个键值对执行传入的操作。

下面是 Map 接口中 forEach 方法的定义:

default void forEach(BiConsumer<? super K, ? super V> action)

该方法接受一个 BiConsumer 参数,BiConsumer 是一个函数接口,表示接受两个参数并执行操作。在这里,BiConsumer 的两个参数分别是键和值。forEach 方法会对Map中的每个键值对调用传入的 action 操作。

具体执行步骤如下:

forEach 方法遍历Map中的所有键值对。
对于每个键值对,调用传入的 action 操作,该操作由Lambda表达式或方法引用表示。
传入的操作(Lambda表达式或方法引用)定义了对每个键值对的具体处理逻辑。
这种方式使得遍历Map并对每个键值对执行操作变得更加简洁和可读。

以下是一个简单的例子,演示了如何使用 forEach 方法输出Map中的键值对:

import java.util.HashMap;
import java.util.Map;public class MapForEachExample {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");// 使用 forEach 方法输出键值对map.forEach((key, value) -> System.out.println("Key: " + key + ", Value: " + value));}
}

在这个例子中,Lambda表达式 (key, value) -> System.out.println("Key: " + key + ", Value: " + value) 定义了对每个键值对的操作,即输出键和值。


2、什么是函数接口

函数接口(Functional Interface)是一个具有单一抽象方法的接口。在Java中,函数接口是为了支持Lambda表达式而引入的概念。Lambda表达式可以理解为匿名函数,而函数接口定义了Lambda表达式的签名。

一个接口如果只有一个抽象方法,那么它就是一个函数接口。Java 8引入了 @FunctionalInterface 注解,用于标记一个接口是否是函数接口。编译器会检查带有 @FunctionalInterface 注解的接口,确保其只包含一个抽象方法,否则会报错。

函数接口的存在主要是为了支持Lambda表达式的使用,使得我们能够以更简洁的方式编写匿名函数。Lambda表达式可以作为函数接口的实例,从而方便地传递和使用。

在多态的概念中,函数接口的使用与接口的多态性有一定的关系。Lambda表达式实际上提供了一种实现接口的快捷方式,使得我们可以在需要接口的地方使用Lambda表达式,从而实现更灵活的代码结构。

例如,前面提到的 BiConsumer 接口就是一个函数接口,因为它只有一个抽象方法 accept。Lambda表达式 (key, value) -> {…} 就可以被认为是 BiConsumer 接口的实例。

总的来说,函数接口是为了更方便地使用Lambda表达式而引入的概念,而Lambda表达式本质上是实现了函数接口的匿名函数。

这篇关于Java中 Map双列集合的遍历: Lambda表达式遍历 →forEach方法遍历双列集合 以及什么是函数式接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/634477

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�