首页 > 编程语言 >java工具类,把list转为map

java工具类,把list转为map

时间:2024-11-15 14:56:46浏览次数:1  
标签:Map java Stream map List list getKey

List和Map是Java集合框架中常用的数据结构,分别用于存储有序的元素列表和键值对。在某些场景下,我们需要将List转换为Map,以便更高效地访问和操作数据。本文将探讨几种常用的List转Map的方式,并对它们的特点进行分析比较。

大体来说,List转Map的方式可以分为以下几种:使用for循环遍历、Java8 Stream API、Apache Commons Collections、Google Guava等。下面分别介绍这些方式的具体实现和特点。

1、使用for循环遍历:

这是最基本也是最常见的一种方式。通过for循环遍历List,逐个获取元素,然后将元素的某个字段作为键,元素本身作为值,将键值对存入Map中。这种方式简单直接,适用于小规模数据集。然而,需要注意遍历过程中的空指针判断和重复键的处理。

Map<String, Entity> map = new HashMap<>();
for (Entity entity : list) {
   if (entity.getKey() != null) {
     map.put(entity.getKey(), entity);
   }
}

 

2、Java8 Stream API:

使用Java8新增的Stream API可以简化代码,并提供了更多的操作方法。通过将List转换为Stream,使用`Collectors.toMap()`方法将Stream元素映射为键值对存入Map。这种方式适合处理大规模数据集,同时具有更好的可读性和扩展性。

Map<String, Entity> map = list.stream()
.filter(entity -> entity.getKey() != null)
.collect(Collectors.toMap(Entity::getKey, Function.identity()));


案例2:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
public class ListToMapExample {
    public static void main(String[] args) {
        // 假设我们有一个包含键值对的List
        List<KeyValuePair> list = List.of(
            new KeyValuePair("key1", "value1"),
            new KeyValuePair("key2", "value2"),
            new KeyValuePair("key3", "value3")
        );
 
        // 使用Stream API将List转换为Map
        Map<String, String> map = list.stream()
            .collect(Collectors.toMap(KeyValuePair::getKey, KeyValuePair::getValue));
 
        // 打印转换后的Map
        map.forEach((key, value) -> System.out.println(key + " -> " + value));
    }
 
    static class KeyValuePair {
        private String key;
        private String value;
 
        public KeyValuePair(String key, String value) {
            this.key = key;
            this.value = value;
        }
 
        public String getKey() {
            return key;
        }
 
        public String getValue() {
            return value;
        }
    }
}

 

 

3、Apache Commons Collections:

Apache Commons Collections是流行的Java类库,提供了许多集合操作工具。其中`CollectionUtils`类的`toMap()`方法可以方便地将List转换为Map。这种方式依赖于外部类库,但提供了更多的便利方法和灵活性。

Map<String, Entity> map = new HashMap<>();

CollectionUtils.toMap(list, Entity::getKey, map);

4、 Google Guava:

Google Guava是Google开源的Java工具类库,也提供了丰富的集合操作接口。其中`Maps`类的`uniqueIndex()`方法可以将List转换为Map。虽然依赖于外部类库,但Guava提供了更多的集合相关功能和效率优化。

Map<String, Entity> map = Maps.uniqueIndex(list, Entity::getKey);

 

总结:

  •    在List转Map的过程中,我们可以选择使用for循环遍历、Java8 Stream API、Apache Commons Collections或Google Guava。
  •     对于小规模数据集,使用for循环遍历是最简单直接的方式。而对于大规模数据集,Java8 Stream API提供了更高效和优雅的实现方式。如果你使用了Apache Commons Collections或Google Guava这些类库,则可以利用它们提供的工具方法简化代码。
  •    选择合适的方式取决于实际需求和项目环境。需要根据数据大小、性能要求、可读性等方面综合评估。无论选择哪种方式,都需要注意处理空指针和重复键的问题,以确保转换结果的准确性和完整性。

标签:Map,java,Stream,map,List,list,getKey
From: https://www.cnblogs.com/pingguomang/p/18548015

相关文章

  • 《Java核心技术 卷I》用户图形界面鼠标事件
    鼠标事件        如果只希望用户能够点击按钮或菜单,那么就不需要显式地处理鼠标事件,鼠标操作将由用户界面中的各种组件内部处理,不过,如果希望用户能使用鼠标画图,就需要捕获鼠标移动,点击和拖动事件。本节,我们将展示一个简单的图形编辑器应用,它允许用户在画布上放置、移......
  • 《Java核心技术 卷I》图形界面事件处理适配器类
    适配器类并不是所有的事件处理都像按钮点击那样简单,假设你想监视用户何时想要关闭主窗体,可能希望弹出一个对话框,只有在用户确认之后才退出程序。当程序试图关闭一个窗口时,JFrame对象就是WindowEvent的事件源,如果希望捕获这个事件,就必须有一个合适的监听器对象,并将它添加到窗体......
  • 如何用Java爬虫精准获取商品历史价格信息
    在数字化时代,商品价格信息的获取变得尤为重要。对于消费者来说,了解商品的历史价格趋势可以帮助他们做出更明智的购买决策。而对于商家来说,掌握价格数据则有助于制定更有效的销售策略。本文将详细介绍如何使用Java编写爬虫程序,精准获取商品的历史价格信息以及API数据。Java爬虫......
  • java代码练习:银行管理系统
    packageTestFirst;importjava.util.Arrays;importjava.util.Objects;importjava.util.Scanner;publicclassTestBank{publicstaticvoidmain(String[]args){Bankbank=newBank();bank.login();}}classBank{Scannerinput=newS......
  • java处理excel文件
    文章目录maven引入依赖编写ExcelUtil工具类使用ExcelUtil工具类maven引入依赖<!--处理excel依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><......
  • Java虚拟机(JVM):Java程序的心脏
    Java虚拟机(JavaVirtualMachine,JVM)是Java运行时环境的核心组件,它不仅为Java程序提供了跨平台的能力,还负责内存管理、类加载、字节码解释与执行等重要功能。本文将深入探讨JVM的架构、内存划分、工作原理以及性能调优等方面的内容,帮助读者全面理解这一关键技术。一、JVM的架构......
  • Java集合框架之Collection集合遍历
    引言在Java编程中,集合(Collection)框架是处理对象集合的核心工具。它提供了一套统一的接口和类来存储和操作对象集合。遍历集合是日常开发中的一项基本任务,本文将深入探讨JavaCollection集合的遍历方法,并提供实际的代码示例。JavaCollection框架概览JavaCollection框架主要......
  • 最全JAVA面试八股文,终于整理完了
    1、Java线程具有五中基本状态(1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threadt=newMyThread();(2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是......
  • java请求频次控制
    1、添加工具类importjava.util.concurrent.atomic.AtomicInteger;/***频次调用控制类*/publicclassRateLimiterUtil{privatefinalAtomicIntegersum;privatefinalintmaxRequests;privatelongperiod=1000;//1秒privatelonglastTime......
  • 2024 年 Java 面试最全攻略:程序员求职跳槽必刷题目 1000+,横扫一切技术盲点!
    写在前面马上又要到收割Offer的季节,你准备好了吗?曾经的我,横扫各个大厂的Offer。还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历真正转化为自己的工作经验。面经分享今天给大家分享一个面试大厂的完整面经,小伙......