자바 8 - 방법 목록에서 개체의 여러 속성을 얻는 방법?

삼바 :

나는 위치 Google 지역 정보 API에 의해 반환하고 가장 낮은 가격으로 장소를 찾아 결정의 목록을 가지고있다.

나는 자바 8을 구현하는 방법을 여기에 있습니다 :

BigDecimal lowestPrice = places.stream()
                .collect(Collectors.groupingBy(Place::getPrice, Collectors.counting()))
                .entrySet().stream().min(Map.Entry.comparingByValue())
                .map(Map.Entry::getKey)
                .orElse(BigDecimal.ZERO); 

그것은 나에게 최저 가격을 반환하지만 (그것이 가지고뿐만 아니라 장소의 이름을 얻을 좋을 것이다 name속성).

어떻게 또한 반환 할 수 name가장 낮은 가격으로 장소의를?

우스만 D :

첫째, 당신이 처음으로 원하는 것을 정말 불분명, 당신은 말할 것 같다

나는 위치 Google 지역 정보 API에 의해 반환 결정의 목록이 가장 낮은 가격으로 장소를 찾을 수를 .

다음 설명의 하단에, 당신은 말 :

그것은 나에게 최저 가격을 반환하지만뿐만 아니라 장소의 이름을 얻기 위해 큰 수 있습니다 (이 이름 속성이 있습니다).

후자는 당신이 원하는 것 같다 것처럼?

그럼에도 불구하고, 여기에 두 솔루션은 다음과 같습니다 :

당신이있을 수 있습니다 어떤 이유 그룹화 한 후 계산에 의해 최소 값을 찾으려면 ... 당신은의 라인을 따라 뭔가를 할 수 :

 places.stream()
       .collect(Collectors.groupingBy(Place::getPrice))
       .entrySet().stream()
       .min(Comparator.comparingInt((Map.Entry<Integer, List<Place>> e) -> e.getValue().size()))
       .map(e -> new SimpleEntry<>(e.getKey(), e.get(0)));  

내가 사용했던 이상주의 Integer항목 키로 그것이 아니라면, 적절한 유형으로 변경 주시기 바랍니다 Integer.


당신이 가장 낮은 가격으로 객체 후 단순히 있다면 그렇지 않으면, 당신은 할 수 있습니다 :

places.stream().min(Comparator.comparingInt(Place::getPrice));

또는:

Collections.min(places, Comparator.comparingInt(Place::getPrice));

그룹화 및 모든 물건에 갈 필요가 없습니다.

추천

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