2017-10-23 7 views
1

저는이 책에서 연습 문제를 해결하려고합니다. Java로 처음으로 객체 : BlueJ를 사용한 실용적인 소개.임계 값 이하인 동물의 합계를 인쇄하십시오.

운동은 다음과 같이 진행됩니다

운동 5.17이 스트림을 사용하는 프로젝트에서 printEndangered 방법을 다시 작성합니다.

원래의 코드는 다음과 같습니다

public void printEndangered(ArrayList<String> animalNames, int dangerThreshold) 
{ 
    for(String animal : animalNames) { 
     if(getCount(animal) <= dangerThreshold) { 
      System.out.println(animal + " is endangered."); 
     } 
    } 
} 

내 시도는 다음과 같습니다

sightings.stream() 
    .filter(s -> animalNames.equals(s.getAnimal())) 
    .filter(s -> s.getCount() <= dangerThreshold) 
    .mapToInt(s -> s.getCount()) 
    .forEach(s -> System.out.println(s)); 
+2

'sightings'이란 무엇이며 원래 코드와 어떤 관련이 있습니까? – Eran

+0

Sightings은 Sighting 클래스의 객체로서 관찰을 포함하는 ArrayList입니다. 어느 것이 만들어진 다른 목격의 정보를 보유하고 있습니다. 프로젝트 파일은 https://www.bluej.org/objects-first/resources/projects.zip에서 다운로드 할 수 있습니다. 5 장 : 동물 모니터링 -v1 – Soer7022

+0

getCount의 기능은 무엇입니까? 그리고이 줄은 이상하다 :'.filter (s -> animalNames.equals (s.getAnimal()))'. arraylist와 동물의 물건을 비교하고 있습니까? –

답변

2

getCount() 방법은 printEndangered를 포함하는 클래스가 아닌 s에 속한다 :

public void printEndangered(ArrayList<String> animalNames, int dangerThreshold) { 
    animalNames.stream() 
       .filter(animal -> getCount(animal) <= dangerThreshold) 
       .map(animal -> animal + " is endangered.") 
       .forEach(System.out::println); 
} 
+0

정말 고마워요! 그 트릭을 했어! – Soer7022

1
sightings.stream() 
//.filter(s -> animalNames.equals(s.getAnimal())) -- not required 
.filter(s -> getCount(s) <= dangerThreshold) 
//.mapToInt(s -> s.getCount()) -- not required 
.forEach(s -> System.out.println(s + " is Endangered")); 
+0

'getCount()'서명이 모두 다릅니 까? – nullpointer

+0

@nullpointer 실수를 깨닫고 편집했습니다. –