简介
微信公众号开发过程中,签名算法需要对参数数组排序。使用java stream sort非常方便,这里分享一下。
排序代码
大概流程:
- 使用java stream将string数组转为stream流。
- 使用stream流的sort方法排序。
- 将排序结果collect聚合成list。
代码如下:
正序排序
package com.coderbbb.book1.utils;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TestUtil {
public static void main(String[] args){
String[] data = new String[]{
"abc",
"bcd",
"222",
"333",
"abcd",
"acbd"
};
List<String> collect = Arrays.stream(data).sorted().collect(Collectors.toList());
System.out.println(collect);
}
}
输出结果截图:
逆序排序
package com.coderbbb.book1.utils;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class TestUtil {
public static void main(String[] args){
String[] data = new String[]{
"abc",
"bcd",
"222",
"333",
"abcd",
"acbd"
};
List<String> collect = Arrays.stream(data).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
System.out.println(collect);
}
}
输出结果如下:
去重代码
和排序类似,也是将String数组转为stream流之后,使用stream流的distinct
方法去重。代码如下:
package com.coderbbb.book1.utils;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TestUtil {
public static void main(String[] args){
String[] data = new String[]{
"abc",
"bcd",
"abc",
"222",
"333",
"abcd",
"acbd"
};
List<String> collect = Arrays.stream(data).distinct().collect(Collectors.toList());
System.out.println(collect);
}
}
输出结果如下,可以看到重复的abc
这个字符串已经被去除了。
java stream转array数组的方法
上面的代码中,我们将String数组排序、去重后,是以list的形式输出的,其实我们也可以用array数组的形式输出,代码如下:
package com.coderbbb.book1.utils;
import java.util.Arrays;
public class TestUtil {
public static void main(String[] args){
String[] data = new String[]{
"abc",
"bcd",
"abc",
"222",
"333",
"abcd",
"acbd"
};
String[] strings = Arrays.stream(data).sorted().toArray(String[]::new);
for(String item:strings){
System.out.println(item);
}
}
}
输出结果如下: