Stream流的中间操作_sorted
sorted方法有两个,一个是无参的,一个是带参的,如下。该方法的作用简单理解就是根据指定的比较器进行排序
Stream
Stream流的中间操作_sorted的练习
xxxxxxxxxx
package ch26;
import java.util.ArrayList;
public class a_6_1测试 {
public static void main(String[] args) {
//创建一个集合,存储多个字符串元素
ArrayList<String> list = new ArrayList<String>();
list.add("b123");
list.add("e12345");
list.add("b12");
list.add("d1");
list.add("a12");
list.add("z12");
list.add("c12");
//--------------------------------------------------------------------------------------------
//需求1:按照字母顺序把数据在控制台输出。如果首字母相同,就会不断比较后面的字母,a优先输出,z最后输出
//sorted方法是自然排序,forEach方法是输出语句
list.stream().sorted().forEach(System.out::println);
System.out.println("---------------------");
//--------------------------------------------------------------------------------------------
//需求2:按照字符串长度把数据在控制台输出.sorted方法有两个参数即比较器接口参数,用Lambda表达式代替
list.stream().sorted((s1,s2)-> s1.length()-s2.length()).forEach(System.out::println);
System.out.println("---------------------");
//上面那行会有一个问题:优先按长度排,长度相同就不排序了,直接按写入的顺序排。我们需要它长度相同时也要按字母排序,解决如下
//优化需求2
list.stream().sorted((s1,s2)->{
int num = s1.length()-s2.length();
int num2 = num==0?s1.compareTo(s2):num;//当长度相同时,按字母顺序进行排序
return num2;
}).forEach(System.out::println);
}
}