[java] Java8 람다를 사용하여 스트림을 역순으로 정렬하는 방법은 무엇입니까?

Java 람다를 사용하여 목록을 정렬하고 있습니다.

역순으로 정렬하려면 어떻게해야합니까?

게시물 을 보았지만 Java 8 람다를 사용하고 싶습니다.

다음은 내 코드입니다 (* -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());



답변

Java에서 ArrayList <Long>을 정렬하는 방법에서 내림차순으로 링크 한 솔루션을 조정할 수 있습니까? 람다로 감싸서 :

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

참고 F2가 첫 번째 인자 인 Long.compare결과가 반전 될 수 있도록, 상기 제되지.


답변

스트림 요소가 구현 Comparable되면 솔루션이 더 간단 해집니다.

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


답변

사용하다

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

그때

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


답변

메소드 참조를 사용할 수 있습니다.

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

Arrays.asList(files).stream()
    .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName()))
    .sorted(comparing(File::lastModified).reversed())
    .skip(numOfNewestToLeave)
    .forEach(item -> item.delete());

메소드 참조 대신 람다 표현식을 사용할 수 있으므로 비교 인수는 다음과 같습니다.

.sorted(comparing(file -> file.lastModified()).reversed());


답변

대체 방법 공유 :

ASC

List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal::getName)).collect(Collectors.toList());

DESC

List<Animal> animals = this.service.findAll();
animals = animals.stream().sorted(Comparator.comparing(Animal::getName).reversed()).collect(Collectors.toList());


답변

이것은 Java 8과 역 Comparator를 사용하여 쉽게 수행 할 수 있습니다 .

디렉토리에서 파일 목록을 만들었습니다.이 목록은 정렬을 위해 간단한 Comparator를 사용하여 정렬되지 않은, 정렬 및 역 정렬 된 다음 반전 된 버전을 얻기 위해 reversed ()를 호출합니다.

아래 코드를 참조하십시오 :

package test;

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

public class SortTest {
    public static void main(String... args) {
        File directory = new File("C:/Media");
        File[] files = directory.listFiles();
        List<File> filesList = Arrays.asList(files);

        Comparator<File> comparator = Comparator.comparingLong(File::lastModified);
        Comparator<File> reverseComparator = comparator.reversed();

        List<File> forwardOrder = filesList.stream().sorted(comparator).collect(Collectors.toList());
        List<File> reverseOrder = filesList.stream().sorted(reverseComparator).collect(Collectors.toList());

        System.out.println("*** Unsorted ***");
        filesList.forEach(SortTest::processFile);

        System.out.println("*** Sort ***");
        forwardOrder.forEach(SortTest::processFile);

        System.out.println("*** Reverse Sort ***");
        reverseOrder.forEach(SortTest::processFile);
    }

    private static void processFile(File file) {
        try {
            if (file.isFile()) {
                System.out.println(file.getCanonicalPath() + " - " + new Date(file.lastModified()));
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}


답변

Java 8 Collections로 파일 목록 정렬

Collections 및 Comparator Java 8을 사용하여 파일 목록을 정렬하는 방법의 예

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ShortFile {

    public static void main(String[] args) {
        List<File> fileList = new ArrayList<>();
        fileList.add(new File("infoSE-201904270100.txt"));
        fileList.add(new File("infoSE-201904280301.txt"));
        fileList.add(new File("infoSE-201904280101.txt"));
        fileList.add(new File("infoSE-201904270101.txt"));

        fileList.forEach(x -> System.out.println(x.getName()));
        Collections.sort(fileList, Comparator.comparing(File::getName).reversed());
        System.out.println("===========================================");
        fileList.forEach(x -> System.out.println(x.getName()));
    }
}