我试图熟悉 Java 流以及该领域的类似事物,但无法对 type 的数组进行排序int。这是我的代码,它根本不对数组进行排序。
class Scratch {
public static void main(String[] args) {
int [] arr3 = { 9,21,5,8 };
Comparator<Integer> cc = (e1,e2) -> {
return e1.compareTo(e2);
};
Arrays.stream(arr3).boxed().sorted();
System.out.println(Arrays.toString(arr3));
}
}
Run Code Online (Sandbox Code Playgroud)
我观察到您的代码打印未排序数组的引用,而它应该将排序数组分配给一个新变量并打印它。此外,您定义的比较器未被使用,也不是代码功能所必需的。
原始数组无法更改 Java 流。Java 流处理不可更改的数据并生成新数据而不是修改原始数据。因此,如果使用 Java 流排序,则需要创建一个新的排序数组。如果要更改原始数组,请使用常用的 Arrays.sort() 方法对其进行排序。
以下是两种固定且有效的方法,以及更多:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Scratch {
public static int[] UNSORTED_ARR = {9, 21, 5, 8};
public static void main(String[] args) {
sort1();
sort2();
sort3();
sort4();
sort5();
}
/**
* Sort using comparator and streams
*/
private static void sort1() {
System.out.println("Sort using comparator and streams");
Comparator<Integer> comparator = Integer::compareTo;
var sortedStream = Arrays.stream(UNSORTED_ARR).boxed().sorted(comparator).toArray();
System.out.println(Arrays.toString(sortedStream));
}
/**
* Sort using sorted() method and streams
*/
private static void sort2() {
System.out.println("Sort using sorted() method and streams");
var sortedStream = Arrays.stream(UNSORTED_ARR).sorted().toArray();
System.out.println(Arrays.toString(sortedStream));
}
/**
* Sort using sorted() method and collect list with streams
*/
private static void sort3() {
System.out.println("Sort using sorted() method and collect list with streams");
List<Integer> sortedList = Arrays.stream(UNSORTED_ARR)
.sorted()
.boxed()
.collect(Collectors.toList());
System.out.println(sortedList);
}
/**
* Sort using reverseOrder() method and streams
*/
private static void sort4() {
System.out.println("Reverse sort using reverseOrder() method and streams");
int[] sortedArr = Arrays.stream(UNSORTED_ARR)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(sortedArr));
}
/**
* Sort using Arrays.sort()
* This modifies the original array and not using streams
*/
private static void sort5() {
System.out.println("Sort using Arrays.sort()");
Arrays.sort(UNSORTED_ARR);
System.out.println(Arrays.toString(UNSORTED_ARR));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Sort using comparator and streams
[5, 8, 9, 21]
Sort using sorted() method and streams
[5, 8, 9, 21]
Sort using sorted() method and collect list with streams
[5, 8, 9, 21]
Reverse sort using reverseOrder() method and streams
[21, 9, 8, 5]
Sort using Arrays.sort()
[5, 8, 9, 21]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |