三种将list转换为map的方法

来源:互联网 发布:linux open函数头文件 编辑:程序博客网 时间:2024/05/18 13:26
1) 传统方法

假设有某个类如下
  
Java代码  收藏代码
  1. class Movie {  
  2.       
  3.     private Integer rank;  
  4.     private String description;  
  5.       
  6.     public Movie(Integer rank, String description) {  
  7.         super();  
  8.         this.rank = rank;  
  9.         this.description = description;  
  10.     }  
  11.       
  12.     public Integer getRank() {  
  13.         return rank;  
  14.     }  
  15.   
  16.     public String getDescription() {  
  17.         return description;  
  18.     }  
  19.   
  20.     @Override  
  21.     public String toString() {  
  22.         return Objects.toStringHelper(this)  
  23.                 .add("rank", rank)  
  24.                 .add("description", description)  
  25.                 .toString();  
  26.     }  
  27. }  


    使用传统的方法:
   
Java代码  收藏代码
  1. @Test  
  2. public void convert_list_to_map_with_java () {  
  3.       
  4.     List<Movie> movies = new ArrayList<Movie>();  
  5.     movies.add(new Movie(1"The Shawshank Redemption"));  
  6.     movies.add(new Movie(2"The Godfather"));  
  7.   
  8.     Map<Integer, Movie> mappedMovies = new HashMap<Integer, Movie>();  
  9.     for (Movie movie : movies) {  
  10.         mappedMovies.put(movie.getRank(), movie);  
  11.     }  
  12.       
  13.     logger.info(mappedMovies);  
  14.   
  15.     assertTrue(mappedMovies.size() == 2);  
  16.     assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription());  
  17. }  


2) JAVA 8直接用流的方法:
   
Java代码  收藏代码
  1. @Test  
  2. public void convert_list_to_map_with_java8_lambda () {  
  3.       
  4.     List<Movie> movies = new ArrayList<Movie>();  
  5.     movies.add(new Movie(1"The Shawshank Redemption"));  
  6.     movies.add(new Movie(2"The Godfather"));  
  7.   
  8.     Map<Integer, Movie> mappedMovies = movies.stream().collect(  
  9.             Collectors.toMap(Movie::getRank, (p) -> p));  
  10.   
  11.     logger.info(mappedMovies);  
  12.   
  13.     assertTrue(mappedMovies.size() == 2);  
  14.     assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription());  
  15. }  



3) 使用guava 工具类库
   
Java代码  收藏代码
  1. @Test  
  2. public void convert_list_to_map_with_guava () {  
  3.   
  4.      
  5.     List<Movie> movies = Lists.newArrayList();  
  6.     movies.add(new Movie(1"The Shawshank Redemption"));  
  7.     movies.add(new Movie(2"The Godfather"));  
  8.       
  9.      
  10.     Map<Integer,Movie> mappedMovies = Maps.uniqueIndex(movies, new Function <Movie,Integer> () {  
  11.           public Integer apply(Movie from) {  
  12.             return from.getRank();   
  13.     }});  
  14.       
  15.     logger.info(mappedMovies);  
  16.       
  17.     assertTrue(mappedMovies.size() == 2);  
  18.     assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription());  

0 0
原创粉丝点击