2015-07-15 36 views
9

tôi có thể sử dụng một cái gì đó như:mục Print list với java 8 api

.forEach(System.out::print) 

để in danh sách các mục của tôi nhưng nếu tôi có một hoạt động để làm trước khi in Tôi không thể sử dụng nó như:

mylist.replaceAll(s -> s.toUpperCase()).forEach(System.out::print) 

tôi nhận được một lỗi : void không thể dereferenced

+0

Và câu hỏi là? (btw, bạn có thể sử dụng một dòng và bản đồ) –

+0

Câu hỏi là tôi đang làm gì sai. – vicolored

Trả lời

18

Bạn phải quyết định. Khi bạn muốn sửa đổi danh sách, bạn không thể kết hợp các hoạt động. Bạn cần hai câu lệnh sau đó.

myList.replaceAll(String::toUpperCase);// modifies the list 
myList.forEach(System.out::println); 

Nếu bạn chỉ muốn map giá trị trước khi in mà không sửa đổi danh sách, bạn sẽ phải sử dụng một Stream:

myList.stream().map(String::toUpperCase).forEachOrdered(System.out::println); 
0

Nếu bạn muốn in và lưu các giá trị sửa đổi đồng thời bạn có thể làm

List<String> newValues = myList.stream().map(String::toUpperCase) 
.peek(System.out::println).collect(Collectors.toList()); 
0

Cách tốt nhất để in tất cả chúng trong một go là

Mảng.toString (list.toArray())

+3

'Arrays.toString (list.toArray())' tạo ra kết quả tương tự như 'list.toString()', nhưng sau này không yêu cầu sao chép toàn bộ nội dung vào một mảng tạm thời. – Holger

+0

người đã bỏ phiếu này? nó vô dụng. – None

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