软件编程
位置:首页>> 软件编程>> java编程>> java 三种将list转换为map的方法详解

java 三种将list转换为map的方法详解

作者:lqh  发布时间:2023-09-13 03:35:39 

标签:list,map

java 三种将list转换为map的方法详解

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

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com