📜  在Java 8 中使用 Lambda 表达式将 ArrayList 转换为 HashMap(1)

📅  最后修改于: 2023-12-03 14:51:16.195000             🧑  作者: Mango

在Java 8 中使用 Lambda 表达式将 ArrayList 转换为 HashMap

在 Java 8 中,使用 Lambda 表达式可以很方便地将一个 ArrayList 转换为 HashMap。下面介绍具体实现方法。

1. 实现代码

以下是实现将 ArrayList 转换为 HashMap 的代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ArrayListToHashMap {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        list.add("pear");

        Map<String, Integer> map = new HashMap<>();
        int i = 1;
        for (String s : list) {
            map.put(s, i++);
        }
        System.out.println(map);
    }
}

输出结果:

{orange=3, banana=2, apple=1, pear=4}
2. Lambda 表达式实现

以下是使用 Lambda 表达式将 ArrayList 转换为 HashMap 的代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ArrayListToHashMapLambda {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        list.add("pear");

        Map<String, Integer> map = new HashMap<>();
        int i = 1;
        list.forEach(s -> map.put(s, i++));
        System.out.println(map);
    }
}

输出结果与上面的代码一致。

3. Lambda 表达式解释

上面的代码中,使用了一个 Lambda 表达式:

s -> map.put(s, i++)

这个表达式的含义是,在循环遍历 list 的时候,对于每一个元素 s,将 s 作为 key,i 作为 value,把它们放到 map 中。之后,i 加上 1。

这个 Lambda 表达式对应的函数式接口是 Consumer,其中 T 是类型参数,代表传入的元素类型。Consumer 中有一个 accept(T t) 方法,这个方法接受一个元素,没有返回值。因此,上面的表达式可以用于 forEach 方法的参数传递。

4. 总结

使用 Lambda 表达式将 ArrayList 转换为 HashMap 可以简化代码,并且使代码更具可读性和可维护性。我们只需要记住 forEach 方法接受的参数是一个 Consumer 对象,也就是需要一个接受元素的函数式接口。