참고 코드


// Scanner로 입력받은 값보다 큰 결과값 출력
public void printGreaterResult(double scannerValue) {
    List<String> greaterList = resultList.stream().filter(str -> {
        try {
            double value = Double.parseDouble(str);
            return value > scannerValue;
        } catch (NumberFormatException e) { // 숫자 변환 안 되는 거 제외 (undefined)
            return false;
        }
    }).toList();

    if (!greaterList.isEmpty())
        System.out.println("입력한 값보다 큰 결과값을 출력합니다: " + greaterList);
}

문제 해결 순서


Scanner로 입력받은 값보다 큰 결과값 출력하기

  1. 언제 이 값을 출력해 줄 것인지

    <aside> 📌

    각각의 숫자를 입력받는 scanner.nextDouble(); 가 있는 getPositiveDouble 함수가 실행되고 나서 첫 번째 숫자를 입력 받고 printGreaterResult 호출, 두 번째 숫자를 입력 받고 printGreaterResult를 호출했다.

    </aside>

    → 에서 변경!! 첫 번째 숫자, 두 번째 숫자 입력할 때 말고 switch-case문에 greater 케이스를 추가해서 그 안에서 기능이 돌아갈 수 있게 처리하는 거로 바꿨다.

    // 큰 결과값 뽑아내기
    case "greater":
        Double scannerValue = getPositiveDouble(scanner, "기준이 되는 원하시는");
        calc.printGreaterResult(scannerValue);
        break;
    
    else {
        System.out.println("입력한 값보다 큰 결과값이 없습니다.");
    }
    

    → 따로 들어와서 기능을 사용해서 리스트를 뽑아내는 거기 때문에 else문도 추가해줬다

  2. 어떤 메서드를 이용해서 값을 걸러낼 것인지

    <aside> 📌

    만족하는 결과를 얻기 위해 값을 걸러내주는 filter()를 사용했다.

    </aside>

  3. resultList는 String을 담고 있는데 숫자 비교 어떻게 할 것인지

    <aside> 📌

    String에서 double처럼 타입이 완전히 다르면 파싱 메서드를 사용해서 변환시켜줘야 한다. 그래서 Double.parseDouble() 을 이용해서 double로 만든 다음 scannerValue와 크기 비교를 했다.

    </aside>

  4. undefined 같은 문자열에 대한 예외 처리 필요

    <aside> 📌

    undefined 같은 경우엔 변환을 하게 되면 런타임에서 NumberFormatException 에러가 발생하기 때문에 try-catch로 잡아서 return false 처리를 해줬다.

    </aside>

  5. 큰 결과값이 없을 경우엔 출력하지 않는다

    <aside> 📌

    if문을 걸어 항상 출력하는 게 아니라 큰 결과값이 있을 때만 출력할 수 있게 한다. 처음엔 .size()로 하려 했는데 인텔리제이에서 .isEmpty()라는 메서드가 있다고 추천해 줘서 변경했다.

    </aside>

  6. .collect(Collectors.toList())을 썼더니 인텔리제이에서 .toList()를 추천해줬고 적용해도 코드가 잘 동작한다??

    <aside> 📌

    Java 16 이상 버전에서는 .toList() 기능이 있다고 한다. 다만 주의할 점은 .toList()로 뽑아내는 건 수정이 불가능하다! greaterList에 addset을 할 수 없다는 소리다. 그래서 Java 16버전 이상에서 간단한 리스트 변환이라면 .toList() 을 사용하면 되고 수정 가능한 리스트가 필요하거나, Java 11 이하라면Collectors.toList()를 사용하면 된다.

    </aside>