Để làm sạch danh sách dữ liệu, tôi đã tạo một phương thức chấp nhận danh sách dữ liệu và danh sách thao tác làm sạch sẽ được thực hiện.
public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) {
List<T>dataNew=data.stream().map((str) -> {
T cleanData = str;
for(Function<T,T> function:cleanOps) {
cleanData=function.apply(cleanData);
}
return cleanData;
}).collect(Collectors.toList());
return dataNew;
}
Vấn đề ở đây là chúng tôi đang tạo lại toàn bộ danh sách khi Collectors.toList()
trả về một danh sách mới. Chúng ta có thể đạt được kết quả tương tự mà không cần sử dụng thêm không gian?
Dưới đây là mã cho lời mời:
public void processData() {
List<Function<String, String>> cleanOps = new ArrayList<>();
cleanOps.add(String::toLowerCase);
cleanOps.add(str -> str.replaceAll(" ", ""));
List<String> data = new ArrayList<>();
data.add("John Doe");
data.add("Jane Doe");
System.out.println(Arrays.toString(cleanData(data, cleanOps).toArray()));
}
toList()
trả vềCollector
không phải là aList
và không: bạn không thể có "dữ liệu bổ sung" mà không có "không gian thừa"