Home > Java > javaTutorial > How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

DDD
Release: 2024-12-28 13:16:10
Original
520 people have browsed it

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

Translating Lists to Maps Efficiently with Java 8 Streams

In Java 8, a common task is to convert a list of objects into a map using streams and lambdas. This can be achieved in various ways, depending on the desired behavior and the availability of third-party libraries like Guava.

Java 7 and Below Approach

Traditionally, mapping a list to a map involved manual iteration and a handwritten loop:

private Map<String, Choice> nameMap(List<Choice> choices) {
    final Map<String, Choice> hashMap = new HashMap<>();
    for (final Choice choice : choices) {
        hashMap.put(choice.getName(), choice);
    }

    return hashMap;
}
Copy after login

Guava-Based Solutions

Guava provides a convenient method, Maps.uniqueIndex, for generating maps from lists based on a specified key extractor.

Guava with Java 7

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }

    });
}
Copy after login

Guava with Java 8 Lambdas

Leveraging Java 8 lambdas simplifies the code even further:

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}
Copy after login

Collectors to the Rescue

Java 8's Collectors class offers a robust implementation for mapping lists to maps. The toMap collector takes two arguments:

  • A key extractor function (a function that retrieves the key for each element)
  • A value extractor function (a function that retrieves the value for each element)

In this case, we can use Choice::getName and Function.identity() to retrieve the key and value, respectively:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));
Copy after login

The above is the detailed content of How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template