首发于技术文章

三种将list转换为map的方法

在本文中,介绍三种将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();  
    }  
}  

1、使用传统的方法:

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

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

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

发布于 2021-04-08 21:23