我使用java lambda对列表进行排序。

我怎么能逆向排序呢?

我看到了这篇文章,但我想使用java 8 lambda。

这是我的代码(我使用* -1)作为一个黑客

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

当前回答

如果你的流元素实现Comparable,那么解决方案就会变得更简单:

 ...stream()
 .sorted(Comparator.reverseOrder())

其他回答

简单地说,使用Comparator和Collection,你可以像下面这样使用JAVA 8按倒序排序

import java.util.Comparator;;
import java.util.stream.Collectors;

Arrays.asList(files).stream()
    .sorted(Comparator.comparing(File::getLastModified).reversed())
    .collect(Collectors.toList());

你可以像这样用自己的逻辑定义比较器;

private static final Comparator<UserResource> sortByLastLogin = (c1, c2) -> {
    if (Objects.isNull(c1.getLastLoggedin())) {
        return -1;
    } else if (Objects.isNull(c2.getLastLoggedin())) {
        return 1;
    }
    return c1.getLastLoggedin().compareTo(c2.getLastLoggedin());
};   

并在foreach中使用它:

list.stream()
     .sorted(sortCredentialsByLastLogin.reversed())
     .collect(Collectors.toList());

你可以适应解决方案,你在如何排序数组列表<长>在Java递减顺序?将它包装在lambda中:

.sorted((f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified())

注意,f2是Long.compare的第一个参数,而不是第二个参数,因此结果将相反。

如果你想按对象的日期类型属性排序,那么

public class Visit implements Serializable, Comparable<Visit>{
private static final long serialVersionUID = 4976278839883192037L;

private Date dos;

public Date getDos() {
    return dos;
}

public void setDos(Date dos) {
    this.dos = dos;
}

@Override
public int compareTo(Visit visit) {
    return this.getDos().compareTo(visit.getDos());
}

}

List<Visit> visits = getResults();//Method making the list
Collections.sort(visits, Collections.reverseOrder());//Reverser order

Use

Comparator<File> comparator = Comparator.comparing(File::lastModified); 
Collections.sort(list, comparator.reversed());

然后

.forEach(item -> item.delete());