3

문자열이있는 경우 스트림을 사용할 때 각 문자가 어떤 색인을 생성하는지 매핑하는 방법은 Map<Character, List<Integer>>입니다. 이것은 내가 현재 가지고있는 것이며, 이것을 작동시키는 더 우아한 방법이 있습니까?자바 8의 두 목록에 대한 병합 함수

Map<Character, List<Integer>> occurs = IntStream.range(0, str.length()) 
    .boxed() 
    .collect(toMap(str::charAt , Arrays::asList, (v1, v2) -> { 
     List<Integer> list = new ArrayList<>(); 
     list.addAll(v1); 
     list.addAll(v2); 
     return list; 
    })); 

답변

2

당신은이 문제를 직접 구현할 필요가 없습니다 - 그냥 내장 Collectors#groupingBy 사용 :

Map<Character, List<Integer>> occurs = 
    IntStream.range(0, str.length()) 
      .boxed() 
      .collect(Collectors.groupingBy(str::charAt));