2016-11-09 20 views
7

Tôi quan tâm đến việc sắp xếp danh sách từ luồng. Đây là mã tôi đang sử dụng:Sắp xếp danh sách bằng stream.sorted() trong Java

list.stream() 
    .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue())) 
    .collect(Collectors.toList()); 

Tôi có thiếu gì đó không? Danh sách không sắp xếp.

Nên sắp xếp danh sách theo mục có giá trị thấp nhất.

for (int i = 0; i < list.size(); i++) 
{ 
    System.out.println("list " + (i+1)); 
    print(list, i); 
} 

Và phương pháp in:

public static void print(List<List> list, int i) 
{ 
    System.out.println(list.get(i).getItem().getValue()); 
} 

Trả lời

26

Điều này không giống như Collections.sort() nơi tham chiếu tham số được sắp xếp. Trong trường hợp này bạn chỉ nhận được một dòng được sắp xếp mà bạn cần phải thu thập và gán cho một biến khác cuối cùng:

List result = list.stream().sorted((o1, o2)->o1.getItem().getValue(). 
            compareTo(o2.getItem().getValue())). 
            collect(Collectors.toList()); 

Bạn vừa bỏ lỡ gán kết quả :)

0

Nó dường như được làm việc tốt:

List<BigDecimal> list = Arrays.asList(new BigDecimal("24.455"), new BigDecimal("23.455"), new BigDecimal("28.455"), new BigDecimal("20.455")); 
System.out.println("Unsorted list: " + list); 
final List<BigDecimal> sortedList = list.stream().sorted((o1, o2) -> o1.compareTo(o2)).collect(Collectors.toList()); 
System.out.println("Sorted list: " + sortedList); 

Ví dụ Input/Output

Unsorted list: [24.455, 23.455, 28.455, 20.455] 
Sorted list: [20.455, 23.455, 24.455, 28.455] 

Bạn có chắc chắn bạn không xác minh danh sách thay vì sortedList [trong ví dụ trên] tức là bạn đang lưu trữ kết quả của stream() trong đối tượng List mới và xác minh đối tượng đó?

3

Sử dụng list.sort thay vì:

list.sort((o1, o2) -> o1.getItem().getValue().compareTo(o2.getItem().getValue())); 

hoặc thậm chí sử dụng tốt hơn Comparator.comparing

list.sort(Comparator.comparing(o -> o.getItem().getValue())); 

Sau khi một trong hai, list chính nó sẽ được sắp xếp.

Vấn đề của bạn là list.stream.sortedtrả về dữ liệu được sắp xếp, nó không được sắp xếp như bạn đang mong đợi.

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