您的位置:首页 > 其它

三种将list转换为map的方法

2015-12-08 13:11 393 查看


三种将list转换为map的方法

博客分类: 

JAVA相关 

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

1) 传统方法 

假设有某个类如下 

  

Java代码  


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

    }  

}  

    使用传统的方法: 

   

Java代码  


@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直接用流的方法: 

   

Java代码  


@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 工具类库 

   

Java代码  


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

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: