Stream流的中间操作_sorted
sorted方法有两个,一个是无参的,一个是带参的,如下。该方法的作用简单理解就是根据指定的比较器进行排序
Stream
Stream流的中间操作_sorted的练习
xxxxxxxxxxpackage 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);
}}