我正在调用这样的方法:
display:inline
这是方法声明:
final List<TimeCard> timeCards = new ArrayList<TimeCard>();
ListFactory.populateLists(accounts, consultants, timeCards);
...
TimeCardListUtil.sortByStartDate(timeCards);
System.out.println("Time cards by date:");
for (TimeCard tc : timeCards) {
System.out.printf(" %s, %s%n", tc.getWeekStartingDay(), tc.getConsultant());
}
方法声明中的println打印正确的顺序,但如果我从调用类打印列表,则顺序不变。
请帮忙。我无法找到解决方案,因为我可能不知道如何表达这个问题。
提前致谢!
答案 0 :(得分:2)
sorted()函数不会更改其操作的流。您需要使函数返回sorted()函数的结果。
答案 1 :(得分:2)
您已对流进行了排序,而不是传入的List<TimeCard>
。
在timeCards
方法中分配sortByStartDate
变量。您将获得在方法之外反映的更改。
使用collet()
来执行此操作。
public static void sortByStartDate(List<TimeCard> timeCards){
timeCards = timeCards.stream()
.sorted((e1, e2) -> e1.getWeekStartingDay().compareTo(e2.getWeekStartingDay())).collect(Collectors.toList());
}
另类清洁方式是:
timeCards.sort((e1, e2) -> e1.getWeekStartingDay().compareTo(e2.getWeekStartingDay()));
<强>更新强>
您可以在不传递lambda的情况下简化排序,但可以使用Comparator
类获得方法引用的优势。
public static void sortByStartDate(List<TimeCard> timeCards){
timeCards = timeCards.stream()
.sort(Comparator.comparing(TimeCard::getWeekStartingDay)).collect(Collectors.toList());
}