java 三种将list转换为map的方法详解
java三种将list转换为map的方法详解
在本文中,介绍三种将list转换为map的方法:
1)传统方法
假设有某个类如下
classMovie{ privateIntegerrank; privateStringdescription; publicMovie(Integerrank,Stringdescription){ super(); this.rank=rank; this.description=description; } publicIntegergetRank(){ returnrank; } publicStringgetDescription(){ returndescription; } @Override publicStringtoString(){ returnObjects.toStringHelper(this) .add("rank",rank) .add("description",description) .toString(); } }
使用传统的方法:
@Test publicvoidconvert_list_to_map_with_java(){ List<Movie>movies=newArrayList<Movie>(); movies.add(newMovie(1,"TheShawshankRedemption")); movies.add(newMovie(2,"TheGodfather")); Map<Integer,Movie>mappedMovies=newHashMap<Integer,Movie>(); for(Moviemovie:movies){ mappedMovies.put(movie.getRank(),movie); } logger.info(mappedMovies); assertTrue(mappedMovies.size()==2); assertEquals("TheShawshankRedemption",mappedMovies.get(1).getDescription()); }
2)JAVA8直接用流的方法:
@Test publicvoidconvert_list_to_map_with_java8_lambda(){ List<Movie>movies=newArrayList<Movie>(); movies.add(newMovie(1,"TheShawshankRedemption")); movies.add(newMovie(2,"TheGodfather")); Map<Integer,Movie>mappedMovies=movies.stream().collect( Collectors.toMap(Movie::getRank,(p)->p)); logger.info(mappedMovies); assertTrue(mappedMovies.size()==2); assertEquals("TheShawshankRedemption",mappedMovies.get(1).getDescription()); }
3)使用guava工具类库
@Test publicvoidconvert_list_to_map_with_guava(){ List<Movie>movies=Lists.newArrayList(); movies.add(newMovie(1,"TheShawshankRedemption")); movies.add(newMovie(2,"TheGodfather")); Map<Integer,Movie>mappedMovies=Maps.uniqueIndex(movies,newFunction<Movie,Integer>(){ publicIntegerapply(Moviefrom){ returnfrom.getRank(); }}); logger.info(mappedMovies); assertTrue(mappedMovies.size()==2); assertEquals("TheShawshankRedemption",mappedMovies.get(1).getDescription()); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!