자바 스트림은 두 개의 목록을 압축

에서 :

나는 사람의 HashSet에 있습니다. 사람이 같은 이름, 성, 연령이 : 사람을 ( "한스", "남자", 36)

[ "한스 남자", "다른 이름", "다른 이름"] : 내 임무는 그들을 나이와이 lastName 등으로 firstName을 CONCAT 종류, 17 세 이상되는 사람의 목록을 얻을 수 있습니다

임은 바로 수입 허용 :

import java.util.stream.Stream; import java.util.stream.Collectors; import java.util.List; import java.util.ArrayList;

내 생각은, 처음으로 정렬 별도의 스트림의 이름을 매핑하고이를 압축하는 것이 었습니다,하지만 작동하지 않습니다.

public static void getNamesOfAdultsSortedByAge(Stream<Person> stream){

    Stream<Person> result = stream;
    Stream<Person> result1 = result.filter(p -> p.getAge() >= 18)
                            .sorted((x, y) -> Integer.compare(x.getAge(),y.getAge()));


    Stream<String> firstName = result1.map(Person::getFirstName);
    Stream<String> lastName = result1.map(Person::getLastName);

    Stream<String> result3 = concat(firstName, lastName);

    List<String> result4 = result3.collect(Collectors.toList());

    System.out.println(result4);
}

사전에 감사합니다

니콜라스 K :

다음을 사용하여 그렇게 할 수 있습니다 :

public static void getNamesOfAdultsSortedByAge(Stream<Person> stream) {
    List<String> sorted = stream.filter(p -> p.getAge() >= 18)
                                .sorted((x, y) -> Integer.compare(x.getAge(),y.getAge()))
                                .map(e -> e.getFirstName() + " " + e.getLastName())
                                .collect(Collectors.toList());
    System.out.println(sorted);
}

여기에서 우리는 단지 map우리가 사용하는 후 첫 번째 이름 다음 마지막 이름을 연결하여 정렬 된 스트림 .collect()터미널 작업을 목록으로 수집합니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=224211&siteId=1