java 三种将list转换为map的方法详解

 更新时间:2017年01月24日 08:48:03   投稿:lqh  
这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下

java 三种将list转换为map的方法详解

 在本文中,介绍三种将list转换为map的方法:

1) 传统方法

假设有某个类如下 

class Movie { 
   
  private Integer rank; 
  private String description; 
   
  public Movie(Integer rank, String description) { 
    super(); 
    this.rank = rank; 
    this.description = description; 
  } 
   
  public Integer getRank() { 
    return rank; 
  } 
 
  public String getDescription() { 
    return description; 
  } 
 
  @Override 
  public String toString() { 
    return Objects.toStringHelper(this) 
        .add("rank", rank) 
        .add("description", description) 
        .toString(); 
  } 
} 

    使用传统的方法:   

@Test 
public void convert_list_to_map_with_java () { 
   
  List<Movie> movies = new ArrayList<Movie>(); 
  movies.add(new Movie(1, "The Shawshank Redemption")); 
  movies.add(new Movie(2, "The Godfather")); 
 
  Map<Integer, Movie> mappedMovies = new HashMap<Integer, Movie>(); 
  for (Movie movie : movies) { 
    mappedMovies.put(movie.getRank(), movie); 
  } 
   
  logger.info(mappedMovies); 
 
  assertTrue(mappedMovies.size() == 2); 
  assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription()); 
} 

2) JAVA 8直接用流的方法:  

@Test 
public void convert_list_to_map_with_java8_lambda () { 
   
  List<Movie> movies = new ArrayList<Movie>(); 
  movies.add(new Movie(1, "The Shawshank Redemption")); 
  movies.add(new Movie(2, "The Godfather")); 
 
  Map<Integer, Movie> mappedMovies = movies.stream().collect( 
      Collectors.toMap(Movie::getRank, (p) -> p)); 
 
  logger.info(mappedMovies); 
 
  assertTrue(mappedMovies.size() == 2); 
  assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription()); 
} 

3) 使用guava 工具类库 

@Test 
public void convert_list_to_map_with_guava () { 
 
   
  List<Movie> movies = Lists.newArrayList(); 
  movies.add(new Movie(1, "The Shawshank Redemption")); 
  movies.add(new Movie(2, "The Godfather")); 
   
   
  Map<Integer,Movie> mappedMovies = Maps.uniqueIndex(movies, new Function <Movie,Integer> () { 
     public Integer apply(Movie from) { 
      return from.getRank();  
  }}); 
   
  logger.info(mappedMovies); 
   
  assertTrue(mappedMovies.size() == 2); 
  assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription()); 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 零基础搭建boot+MybatisPlus的详细教程

    零基础搭建boot+MybatisPlus的详细教程

    这篇文章主要介绍了零基础搭建boot+MybatisPlus,首先需要创建数据库表和创建boot项目使用mybatisplus操作数据库,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 手撸一个 spring-boot-starter的全过程

    手撸一个 spring-boot-starter的全过程

    这篇文章主要介绍了手撸一个 spring-boot-starter的全过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • JavaWeb使用Session和Cookie实现登录认证

    JavaWeb使用Session和Cookie实现登录认证

    本篇文章主要介绍了JavaWeb使用Session和Cookie实现登录认证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 解决Maven无法下载2.1.7.js7版本的itext依赖问题

    解决Maven无法下载2.1.7.js7版本的itext依赖问题

    本文主要解决使用Maven编译项目时出现的itext依赖版本问题,通过分析,发现该问题是由jasperreports依赖的特定版本itext导致的,解决方法是排除jasperreports中的itext依赖,并自行指定更高版本的itext依赖
    2024-12-12
  • Java无法获取真实IP解决方案

    Java无法获取真实IP解决方案

    这篇文章主要介绍了Java无法获取真实IP解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • springboot整合netty实现心跳检测和自动重连

    springboot整合netty实现心跳检测和自动重连

    本文主要介绍了Spring Boot中整合Netty实现心跳检测和自动重连,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Java中Semaphore信号量的方法解析

    Java中Semaphore信号量的方法解析

    这篇文章主要介绍了Java中Semaphore信号量的方法解析,  Semaphore信号量是用来控制同 时访问 特定 资 源的 线 程数量,它通 过协调 各个 线 程,以保证合理的使用公共 资源,需要的朋友可以参考下
    2023-12-12
  • PageHelper引发的幽灵数据问题解析

    PageHelper引发的幽灵数据问题解析

    这篇文章主要为大家介绍了PageHelper引发的幽灵数据问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 出现java.util.ConcurrentModificationException 问题及解决办法

    出现java.util.ConcurrentModificationException 问题及解决办法

    这篇文章主要介绍了出现java.util.ConcurrentModificationException 问题及解决办法的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java并发编程之栅栏(CyclicBarrier)实例介绍

    Java并发编程之栅栏(CyclicBarrier)实例介绍

    这篇文章主要介绍了Java并发编程之栅栏(CyclicBarrier)实例介绍,栅栏类似闭锁,但是它们是有区别的,需要的朋友可以参考下
    2015-04-04

最新评论