2013-08-12 61 views
6

EDIT: Tìm thấy giải pháp ở đây: http://www.dreamsyssoft.com/java-8-lambda-tutorial/map-reduce-tutorial.phpJava 8 tổng và tổng không tìm thấy

Tôi đang theo hướng dẫn này:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

Khi tôi nhận được đến phần mà nó sử dụng số tiền và chức năng trung bình, tôi nhận được lỗi sau:

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> 

Tôi gặp lỗi tương tự khi gọi tổng. Vì lý do nào đó, có vẻ như nó đang sử dụng luồng thay vì lớp DoubleStream. Tôi đang sử dụng jdk mới nhất với lambda kích hoạt được liên kết trong hướng dẫn.

Có ai cũng gặp sự cố này và có thể giải quyết vấn đề này không?

Dưới đây là một ví dụ đơn giản mà tái tạo các vấn đề:

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

Ồ wow, tôi nghĩ chúng tôi phải chờ đến tháng 9 để giải quyết JDK 8. –

+0

bạn có thể nhận bản phát hành truy cập sớm – BevynQ

+0

Khi làm việc với bản phát hành sớm, có thể tốt hơn nếu bạn đặt câu hỏi/quan tâm đến trợ giúp cụ thể JDK 8 diễn đàn .... –

Trả lời

19

Bạn cần thay đổi các chức năng bản đồ để trả về một dòng nguyên thủy, ví dụ:

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

Lý do cơ bản là a Stream<Double> (trả lại bởi map) không phải là DoubleStream (trả lại bởi mapToDouble). Chỉ cái sau mới có phương thức trung bình và tổng.

Các vấn đề liên quan