首页 > 开发 > Java > 正文

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

2024-07-13 10:03:27
字体:
来源:转载
供稿:网友

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()); } 

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表