2013-08-12 4 views
6

EDIT를 찾을 수 없습니다 http://www.dreamsyssoft.com/java-8-lambda-tutorial/map-reduce-tutorial.php자바 8 합 총

나는이 자습서 다음 해요 : :

나는 그것이 합계를 사용하여 어디 부분에 도착 http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

여기에 해결책을 찾을 수 평균 함수를 사용하면 다음 오류가 발생합니다.

UserAverageTest.java:68: error: cannot find symbol 
     double average = users.parallelStream().filter(u -> u.age > 0).map(u -> u.age).average().getAsDouble(); 
                        ^
    symbol: method average() 
    location: interface Stream<Double> 

sum을 호출 할 때도 같은 오류가 발생합니다. 어떤 이유로 DoubleStream 클래스 대신 Stream을 사용하고있는 것처럼 보입니다. 튜토리얼에서 링크 된 람다를 사용하는 최신 jdk를 사용하고 있습니다.

누구든지이 문제를 해결했으며이를 해결할 수 있었습니까?

class User { 
    double age; 
    public User(double age) { this.age = age; } 
    double getAge() { return age; } 
} 

public static void main(String[] args) throws Exception { 
    List<User> users = Arrays.asList(new User(10), new User(20), new User(30)); 
    double average = users.parallelStream() 
          .filter(u -> u.age > 0) 
          .map(u -> u.age) 
          .average() 
          .getAsDouble(); 
} 
+0

와우, 9 월에 JDK 8을 피하기 위해 기다려야한다고 생각했습니다. –

+0

초기 액세스 릴리스 – BevynQ

+0

초기 릴리스로 작업 할 때 JDK 8 특정 도움말 포럼 .... –

답변

19

당신은 예를 들어, 프리미티브의 스트림을 반환하는지도 기능을 변경해야합니다 :

double average = users.parallelStream().filter(u -> u.age > 0).mapToDouble(u -> u.age).average().getAsDouble(); 
                    ^^^^^^^^ 

근본적인 이유가 있다는 것입니다 여기에

문제를 재현 간단한 예입니다 Stream<Double> ( map이 반환 함)은 DoubleStream ( mapToDouble이 반환 함)이 아닙니다. 후자 만 평균 및 합계 방법을가집니다.