Tôi đề nghị bạn trước tiên nên cố gắng hiểu toàn bộ Java 8, quan trọng nhất trong trường hợp của bạn, đó sẽ là các luồng, lambdas và tham chiếu phương thức.
Bạn không bao giờ nên chuyển đổi mã hiện có sang mã Java 8 trên cơ sở từng dòng một, bạn nên trích xuất các tính năng và chuyển đổi chúng.
Những gì tôi xác định được trong trường hợp đầu tiên của bạn là:
- Bạn muốn thêm các phần tử của cấu trúc đầu vào vào danh sách đầu ra nếu chúng khớp với một số vị từ.
Hãy xem cách chúng tôi làm điều đó, chúng tôi có thể làm điều đó với những điều sau:
List<Player> playersOfTeam = players.stream()
.filter(player -> player.getTeam().equals(teamName))
.collect(Collectors.toList());
Những gì bạn làm ở đây là:
- Biến cấu trúc đầu vào của bạn thành một luồng (tôi giả sử ở đây rằng nó thuộc loại
Collection<Player>
, bây giờ bạn có một Stream<Player>
.
- Lọc bỏ tất cả các phần tử không mong muốn bằng a
Predicate<Player>
, ánh xạ mọi trình phát tới boolean true nếu nó được giữ lại.
- Thu thập các phần tử kết quả trong một danh sách, thông qua a
Collector
, ở đây chúng ta có thể sử dụng một trong các trình thu thập thư viện tiêu chuẩn, đó là Collectors.toList()
.
Điều này cũng kết hợp hai điểm khác:
- Mã chống lại các giao diện, vì vậy mã chống lại
List<E>
hơn ArrayList<E>
.
- Sử dụng suy luận kim cương cho tham số kiểu trong
new ArrayList<>()
, dù gì thì bạn cũng đang sử dụng Java 8.
Bây giờ vào điểm thứ hai của bạn:
Bạn lại muốn chuyển đổi một thứ gì đó của Java cũ sang Java 8 mà không cần nhìn vào bức tranh lớn hơn. Phần này đã được trả lời bởi @IanRoberts , mặc dù tôi nghĩ rằng bạn cần phải làm players.stream().filter(...)...
theo những gì anh ấy đề xuất.