在本文中,介绍三种将list转换为map的方法:
1) 传统方法
假设有某个类如下
使用传统的方法:
2) JAVA 8直接用流的方法:
3) 使用guava 工具类库
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());
- }