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


方法二: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()); 


方法三:使用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());