在本文中,介绍三种将list转换为map的方法:
1) 传统方法
假设有某个类如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@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直接用流的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@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 工具类库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@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());
}
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!