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

发布时间:2024年01月21日

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表达式本质上是实现了函数接口的匿名函数。

文章来源:https://blog.csdn.net/Forever_Hopeful/article/details/135736636
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。