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