94

Trong khi tìm kiếm thông qua một số mã tôi đã đi qua các nhà điều hành mũi tên, chính xác những gì nó làm gì? Tôi nghĩ Java không có toán tử mũi tên.Toán tử mũi tên, '->', làm gì trong Java?

return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) -> { 
     return Car.SEDAN == ((Car)arg0).getStyle(); 
}); 

Chi tiết: Java 6, Apache Commons Collection, IntelliJ 12

Cập nhật/Trả lời: Nó chỉ ra rằng IntelliJ 12 hỗ trợ Java 8, hỗ trợ lambdas, và là " gấp "Predicates và hiển thị chúng như lambdas. Dưới đây là mã "chưa được gấp".

return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() { 
    public boolean evaluate(Object arg0) { 
     return Car.SEDAN == ((Car)arg0).getStyle(); 
    } 
}); 
+3

Lưu ý rằng kịch bản chính xác là IntelliJ _rendering_ mã hiện như một biểu thức lambda để làm nó dễ đọc hơn. Mã thực tế không phải là một biểu thức lambda. –

Trả lời

74

Đó là một phần của cú pháp của biểu thức lambda mới, sẽ được giới thiệu trong Java 8. Có một vài hướng dẫn trực tuyến để nhận được hang của nó, đây là một link một. Về cơ bản, các -> tách các tham số (bên trái) từ biểu thức thực tế (bên phải).

+8

OP sử dụng JDK 6, vì vậy đây thực sự chỉ là mã xếp IntelliJ theo câu trả lời @antonm bên dưới –

+1

@SeanLandsman OP có thể sử dụng Java 6, nhưng trong câu hỏi, anh ta tuyên bố rằng anh ta đã xem mã đó ở nơi khác. Tại sao IntelliJ không báo cáo một lỗi, đó là một bí ẩn (có lẽ có _is_ một phiên bản Java 7 được cài đặt ở đâu đó trong hệ thống của OP). Nhưng đó là một cú pháp của biểu thức lambda trong Java, không có câu hỏi về nó. –

9

Đó là biểu thức lambda.

Điều đó có nghĩa rằng, từ listOfCars, arg0 là một trong các mục của danh sách đó. Với mục đó anh ta sẽ làm, do đó ->, bất cứ điều gì là bên trong dấu ngoặc đơn.

Trong ví dụ này, anh ta sẽ trả về một danh sách những chiếc xe phù hợp với điều kiện

Car.SEDAN == ((Car)arg0).getStyle(); 
26

Tôi tin rằng, mũi tên này tồn tại vì IDE của bạn. IntelliJ IDEA thực hiện điều đó với một số mã. Điều này được gọi là mã gấp. Bạn có thể nhấp vào mũi tên để mở rộng.

+0

có nhiều khả năng hơn. – irreputable

+9

Điều đó sai. Đó là một biểu thức lambda Java 8. –

+23

@DavidConrad Không, không sai. IntelliJ thực sự gấp các triển khai nội tuyến của các giao diện chức năng để trông giống như lambdas. – balpha

8

một này rất hữu ích cũng như khi bạn muốn thực hiện một giao diện

Runnable r =()-> System.out.print("Run method"); 

tương đương với

Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       System.out.print("Run method"); 
      } 
     }; 
Các vấn đề liên quan