Tôi vừa gặp một câu hỏi khi sử dụng a List
và stream()
phương thức của nó . Mặc dù tôi biết cách sử dụng chúng, nhưng tôi không chắc chắn về thời điểm sử dụng chúng.
Ví dụ, tôi có một danh sách, chứa nhiều đường dẫn đến các vị trí khác nhau. Bây giờ, tôi muốn kiểm tra xem một đường dẫn đã cho có chứa bất kỳ đường dẫn nào được chỉ định trong danh sách hay không. Tôi muốn trả lại boolean
dựa trên việc điều kiện đó có được đáp ứng hay không.
Tất nhiên, đây không phải là một nhiệm vụ khó khăn. Nhưng tôi băn khoăn không biết nên sử dụng luồng hay vòng lặp for (-each).
Danh sách
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
Ví dụ - Luồng
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
Ví dụ - Cho-Mỗi vòng lặp
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
Lưu ý rằng path
tham số luôn là chữ thường .
Dự đoán đầu tiên của tôi là cách tiếp cận cho từng cách nhanh hơn, vì vòng lặp sẽ trả lại ngay lập tức, nếu điều kiện được đáp ứng. Trong khi luồng sẽ vẫn lặp lại tất cả các mục trong danh sách để hoàn tất quá trình lọc.
Giả định của tôi có đúng không? Nếu vậy, tại sao (hay đúng hơn là khi nào ) tôi lại sử dụng stream()
?
new String[]{…}
ở đây. Chỉ cần sử dụngArrays.asList("my/path/one", "my/path/two")
String[]
thì không cần gọi Arrays.asList
. Bạn chỉ có thể truyền qua mảng bằng cách sử dụng Arrays.stream(array)
. Nhân tiện, tôi gặp khó khăn trong việc hiểu isExcluded
hoàn toàn mục đích của bài kiểm tra. Có thực sự thú vị không khi một phần tử của EXCLUDE_PATHS
được chứa ở đâu đó trong đường dẫn? Tức là isExcluded("my/path/one/foo/bar/baz")
sẽ trở lại true
, cũng như isExcluded("foo/bar/baz/my/path/one/")
…
Arrays.stream
phương pháp, cảm ơn vì đã chỉ ra điều đó. Thật vậy, ví dụ tôi đã đăng có vẻ khá vô dụng đối với bất kỳ ai khác ngoài tôi. Tôi biết về hoạt động của isExcluded
phương pháp, nhưng nó thực sự chỉ là thứ tôi cần cho bản thân, do đó, để trả lời câu hỏi của bạn: vâng , thật thú vị vì những lý do tôi không muốn đề cập, vì nó sẽ không phù hợp với phạm vi của câu hỏi ban đầu.
toLowerCase
áp dụng cho hằng số đã là chữ thường? Nó không nên được áp dụng cho path
đối số?