三种将list转换为map的方法
2015-12-08 13:11
393 查看
三种将list转换为map的方法
博客分类: JAVA相关
在本文中,介绍三种将list转换为map的方法:
1) 传统方法
假设有某个类如下
Java代码
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();
}
}
使用传统的方法:
Java代码
@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直接用流的方法:
Java代码
@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 工具类库
Java代码
@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());
}
相关文章推荐
- python实现select和epoll模型socket网络编程
- 杭电acm1073
- php_curl模拟登录有验证码实例
- Android 学习系列
- 阻止重复提交? struts2 的 token 这么搞绝对没问题!
- Android与服务器交互
- oracle 自增长序列
- MFC 手把手 写一个文件播放小程序(这个是直接copy的 我会动手做一遍 然后发自己原创的)
- 详解APP应用分发平台的榜单推荐和搜索排名规则
- 12.8工作日志
- 使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
- 安卓苹果手机修改MAC地址教程
- 如何推广一个新的App软件
- App运营必须关注的5个数据指标
- HTML5 地理定位
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<三>
- python代码解析
- git简单操作
- 大学生必备软件免费自学视频教程,让那些培训班都见鬼去吧
- 用Js的eval解析JSON中的注意点