欢迎光临
我们一直在努力

java string数组排序,java中数组的排序方法

对一个字符串数组排序

首先生成一个字符串数组

String[] stringArray = { “jydfs”, “James”, “英俊的草莓”, “John”, “tsdgk”, “Robert”, “jqd”, “幸福的凉面” }; 方法1 method reference

Java doc中对method reference的描述

Arrays.sort(stringArray, String::compareToIgnoreCase); for(String s: stringArray) System.out.print(s + ” “); 方法2 lambda

通过在comparator(functional interface) 出使用lambda expression来进行排序

funtional interface, 只有一个abstract method,但是可以有多个default 以及static。这里也是体现了java interface的意义,即告诉coder这个函数是干嘛。打个比方,你看到KFC的招牌就知道里面是卖炸鸡的,不管后来在任何城市国家都是这样。但是假如没有这块KFC的招牌,你每次进去都要问,有没有炸鸡,有没有甜筒,有没有汉堡…尽管每个KFC店做的口味(function behaviour)不同,但是你还是知道这就是junk food

Arrays.sort(stringArray,(a,b)->{return -a.compareTo(b);}); for(String s: stringArray) System.out.print(s + ” “); Sys.out.println(); 方法3 # class

为什么叫anonymous呢,因为他没有“名字”。

首先,我们要发现,这个叫“class”而不是”interface“了。假如不采用这种方法,我们需要先把comparator继承,然后再实例化,匿名类帮我们省去了这个过程。他直接使用interface,或者将interface储存在一个variable中

Comparator c = new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubreturn o1.compareTo(o2);} Arrays.sort(stringArray,new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubreturn o1.compareTo(o2);} }); import java.util.function

这里包含了大量functional interface

这里再补充一个lambda使用的例子

package lamdba;import java.util.Arrays;import java.util.Comparator;import java.util.function.Consumer;// 自己定义一个generic functional interface@FunctionalInterfaceinterface f<T>{void apply(T t);}public class LambdaScopeTest { public int x = 0; class FirstLevel { public int x = 1; void methodInFirstLevel(int x) { // The following statement causes the compiler to generate // the error “local variables referenced from a lambda expression // must be final or effectively final” in statement A: // //x = 99; // 如果有了上面的x = 99,下面会报错,因为x必须是final类型,anonymous class 传入的参数也不能叫“x” f<Integer> tF = Z -> {System.out.println(Z*x);}; Consumer<Integer> myConsumer = (y) -> { System.out.println(“x = ” + x); // Statement A System.out.println(“y = ” + y); System.out.println(“this.x = ” + this.x); System.out.println(“LambdaScopeTest.this.x = ” + LambdaScopeTest.this.x); }; myConsumer.accept(x); tF.apply(10); } } public static void main(String… args) { LambdaScopeTest st = new LambdaScopeTest(); LambdaScopeTest.FirstLevel fl = st.new FirstLevel(); fl.methodInFirstLevel(23); } }

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。