리스트를 맵으로 바꾸는 세 가지 방법

2835 단어
텍스트 이동 위치:https://www.iteye.com/blog/jackyrong-2158009
본고에서 list를 맵으로 전환하는 세 가지 방법을 소개한다. 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();  
    }  
}  

1. 전통적인 방법을 사용한다.
@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());  
} 

좋은 웹페이지 즐겨찾기