2016-11-09 3 views
7

ストリームからリストをソートすることに興味があります。これは私が使用しているコードです:リストをJavaでstream.sorted()にソートする

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

私に何かが不足していますか?リストはソートされていません。

最低値を持つ項目に従ってリストをソートする必要があります。

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

そして、印刷方法:

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

答えて

26

Collections.sort()とは異なり、パラメータ参照がソートされます。あなただけの結果を割り当てるために見逃している:)

0

それは正常に動作しているようだ:

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); 

例の入力/出力

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

がよろしいです上記の例でsortedListの代わりにリストを確認していない、つまりstream()の結果を新しいListオブジェクトに保存し、そのオブジェクトを確認していますか?

3

使用list.sort代わり

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

この場合、あなたはちょうどあなたが収集し、最終的には別の変数に代入する必要がソートされたストリームを取得します
list.sort((o1, o2) -> o1.getItem().getValue().compareTo(o2.getItem().getValue())); 

かさえ良く使うComparator.comparing

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

これらのいずれかの後に、list自体がソートされます。

あなたの問題は、あなたが期待しているよう list.stream.sorted戻りソートされたデータは、それが所定の位置に並べ替えていないということです。

関連する問題