java中一个基本类型的数组怎么使用lambda进行排序?

cc12 发布于 07/18 18:44
阅读 318
收藏 1

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

比如 int[]nums 用Arrays.sort如果使用lambda进行排序的话会报错,因为数组是基本类型的

加载中
2
tonglingbaoyu
tonglingbaoyu

 

int a[] ={22,33,52,43,78,91,12,9,4,99};
a=IntStream.of(a).sorted().toArray();
System.out.println(Arrays.toString(a));

 

 

0
15------07
15------07

为什么要用lambda排序呢?既然是基本类型了还需要使用Comparable吗?

0
tcxu
tcxu

不知这样可否?若遇到 java基本类型数据的数组, 如果一定(执意)要书写成 "lambda, 即 带有参数的代码块的形式进行排序的时候,可以将基本数据类型的元素数组转换成对应的包装类数组,以便写成 "lambda" 进行排序。

例如, (1) 对于 整型数组,可以装换成其包装类 Integer,再使用 "lambda" 形式 来书写排列代码。 

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

public class A1 {

    static void sortInt(int[] a , boolean ascending ) {
    List<Integer> list = new ArrayList<>();
 	for(int n:a)
 	list.add(n);
 	if (ascending)
	System.out.println(" 升序排列:" + list.stream().sorted().collect(Collectors.toList()));
	else
	System.out.println(" 降序排列:" + list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
    }
    
    public static void main(String arg[]){
    	int a[] ={22,33,52,43,78,91,12,9,4,99};
    	sortInt(a, true);
    	sortInt(a, false);   	
    }
}
D:\java\test\OS_China>javac A1.java

D:\java\test\OS_China>java A1
 升序排列:[4, 9, 12, 22, 33, 43, 52, 78, 91, 99]
 降序排列:[99, 91, 78, 52, 43, 33, 22, 12, 9, 4]

D:\java\test\OS_China>

而 对于 (2) 双精度元素 double 数组,可以装换成其包装类 Double,再使用 "lambda" 形式 来书写排列代码。 

import java.util.List;
import java.util.ArrayList;
public class A {

    static void sortDouble(double[] a , boolean ascending ) {
    List<Double> list = new ArrayList<>();
 	for(double d:a)
 	list.add(d);
 	if (ascending){
 	list.sort((a1,a2)->a1.compareTo(a2));
	System.out.println(" 升序排列:" + list);
	} else{
	list.sort((a1,a2)->a2.compareTo(a1));
	System.out.println(" 降序排列:" + list);
    }
    }   
    public static void main(String arg[]){
    	double a[] ={21.2,32.3,53.2,44.39,87.8,91.1,12.2,91.0,45.0,99.9};
    	sortDouble(a, true);
    	sortDouble(a, false);   	
    }
}

DOS 窗口:

D:\java\test\OS_China>java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

D:\java\test\OS_China>javac A.java

D:\java\test\OS_China>java A
 升序排列:[12.2, 21.2, 32.3, 44.39, 45.0, 53.2, 87.8, 91.0, 91.1, 99.9]
 降序排列:[99.9, 91.1, 91.0, 87.8, 53.2, 45.0, 44.39, 32.3, 21.2, 12.2]

D:\java\test\OS_China>

最后,有个问题:以上两个案例,是否都算是使用了 "lambda" 的书写形式?

返回顶部
顶部