我对从流中排序列表感兴趣。这是我使用的代码:
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());
}
9条答案
按热度按时间afdcj2ne1#
这与
Collections.sort()
不同,在Collections.sort()
中,参数引用被排序。在这种情况下,你只是得到一个排序的流,你需要收集它并最终赋值给另一个变量:你刚刚错过了分配结果
kgsdhlau2#
使用
list.sort
代替:并使用
Comparator.comparing
使其更简洁:在这两种情况中的任何一种之后,
list
本身将被排序。你的问题是
list.stream.sorted
* 返回 * 排序的数据,它没有像你期望的那样排序。o2rvlv0m3#
Java 8提供了不同的实用API方法来帮助我们更好地对流进行排序。
如果你的列表是一个整数列表(或Double,Long,String等),那么你可以简单地使用java提供的默认比较器对列表进行排序。
动态创建比较器:
使用java 8提供的默认比较器,当没有参数传递给sorted()时:
如果要对同一个列表进行倒序排序:
如果您的列表是用户定义对象的列表,则:
动态创建比较器:
使用Comparator.comparingLong()方法(我们也有comparingDouble(),comparingInt()方法):
使用Comparator.comparing()方法(根据提供的getter方法进行比较的泛型方法):
我们也可以使用thenComparing()方法进行链接:
人员类别
7gs2gvoe4#
它似乎工作得很好:
输入/输出示例
你确定你不是在验证list而不是
sortedList
(在上面的例子中),即你是在一个新的List
对象中存储stream()
的结果并验证该对象吗?kuhbmx9i5#
使用streamAPI对Integer进行排序
flmtquvp6#
这是一个简单的例子:
您的IDE可能没有获得jdk 1.8或更高版本来编译代码。
为Your_Project〉properties〉Project Facets〉Java version 1.8设置Java version 1.8
f45qwnt87#
这可能有助于人们结束在这里搜索如何按字母顺序排序列表。
oknrviil8#
使用比较器:
编辑:JDK 16+
j9per5c49#
****这有助于对嵌套的map对象进行排序,如Map〉这里我基于Item对象价格进行排序。