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

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 movies = new ArrayList();

movies.add(new Movie(1, "The Shawshank Redemption"));

movies.add(new Movie(2, "The Godfather"));

Map mappedMovies = new HashMap();

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 movies = new ArrayList();

movies.add(new Movie(1, "The Shawshank Redemption"));

movies.add(new Movie(2, "The Godfather"));

Map 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 movies = Lists.newArrayList();

movies.add(new Movie(1, "The Shawshank Redemption"));

movies.add(new Movie(2, "The Godfather"));

Map mappedMovies = Maps.uniqueIndex(movies, new Function () {

public Integer apply(Movie from) {

return from.getRank();

}});

logger.info(mappedMovies);

assertTrue(mappedMovies.size() == 2);

assertEquals("The Shawshank Redemption", mappedMovies.get(1).getDescription());

}

8

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2014-11-19 14:40

浏览 142418

评论

2 楼

Cxexti

2014-11-20

我无耻的粘贴到我空间了

1 楼

chenglm

2014-11-19

写的不错

75a3bf8974c9bd5a56863a745113d139.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值