Używam java lambda do sortowania listy.
jak mogę to posortować w odwrotny sposób?
Widziałem ten post , ale chcę użyć java 8 lambda.
Oto mój kod (użyłem * -1) jako hack
Arrays.asList(files).stream()
.filter(file -> isNameLikeBaseLine(file, baseLineFile.getName()))
.sorted(new Comparator<File>() {
public int compare(File o1, File o2) {
int answer;
if (o1.lastModified() == o2.lastModified()) {
answer = 0;
} else if (o1.lastModified() > o2.lastModified()) {
answer = 1;
} else {
answer = -1;
}
return -1 * answer;
}
})
.skip(numOfNewestToLeave)
.forEach(item -> item.delete());
forEachOrdered
zamiastforEach
forEachOrdered
, jak sama nazwa wskazuje, dba o kolejność spotkań, która jest istotna, ponieważ chcesz pominąć pewną liczbę najnowszych plików, która opiera się na kolejności „sortowania według czasu modyfikacji” .
sort
→ skip
→ (nieuporządkowane) forEach
powinno działać, jest poprawne i że rzeczywiście zostało wdrożone, aby działało w ten sposób w dzisiejszych JRE, ale w 2015 r., Kiedy pojawiły się poprzednie komentarze, to rzeczywiście był problemem (jak można przeczytać w tym pytaniu ).
-1 * answer
sięanswer
kolejność zmieni się odwrócić tego, co było z-1 * ...
.