나는 다음과 같은 상황이 있습니다
Map<Key, ListContainer> map;
public class ListContainer{
List<AClass> lst;
}
지도 lst
에서 ListContainer
개체의 모든 목록을 병합해야합니다 Map
.
public static void main(String args[]){
List<AClass> alltheObjectsAClass = map.values().stream(). // continue....
}
Java 8 스트림 API를 사용하여 어떻게 생각하십니까?
답변
나는 flatMap()
당신이 찾고있는 것이라고 생각 합니다.
예를 들면 :
List<AClass> allTheObjects = map.values()
.stream()
.flatMap(listContainer -> listContainer.lst.stream())
.collect(Collectors.toList());
답변
대안 : Stream.concat ()
Stream.concat(map.values().stream(), listContainer.lst.stream())
.collect(Collectors.toList()
답변
Java 8에서는 스트림 List1.stream (). collect (Collectors.toList ()). addAll (List2); 다른 옵션 List1.addAll (List2)
답변
위에서 이미 답변했지만 취할 수있는 또 다른 접근 방법이 있습니다. 나는 이것을 수정 한 원본 게시물을 찾을 수 없지만 여기에 귀하의 질문에 대한 코드가 있습니다. 위에서 언급했듯이 flatMap () 함수는 Java 8에서 활용하고자하는 것입니다. 유틸리티 클래스에이를 던져 “RandomUtils.combine (list1, list2, …);”을 호출 할 수 있습니다. 모든 값이 포함 된 단일 목록을 얻게됩니다. 와일드 카드에주의하십시오. 덜 일반적인 방법을 원하면이를 변경할 수 있습니다. Set에 대해 수정할 수도 있습니다. Set 인터페이스의 특성으로 인해 equals / hashCode 메서드에서 데이터 손실을 방지하기 위해 집합에서 flatMap ()을 사용할 때주의해야합니다.
/**
* Combines multiple lists into a single list containing all elements of
* every list.
*
* @param <T> - The type of the lists.
* @param lists - The group of List implementations to combine
* @return a single List<?> containing all elements of the passed in lists.
*/
public static <T> List<?> combine(final List<?>... lists) {
return Stream.of(lists).flatMap(List::stream).collect(Collectors.toList());
}