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

本文详细介绍了在Java中将List转换为Map的三种常见方法:1) 使用传统for循环遍历构建Map;2) 利用Java 8的Stream API和Collectors.toMap函数;3) 使用Guava库的Maps.uniqueIndex方法。每种方法都通过示例代码进行了演示,并在测试中验证了转换结果的正确性。
摘要由CSDN通过智能技术生成

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

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值