Stream和Collections工具类
Stream流
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、聚合等。
public static void main(String[] args){List<String> list =new ArrayList<>(Arrays.asList("aaaa","Saaaa","Saaaa","xx","Xss","Lxxx"));//删除长度不大于3的字符串//删除首字母不为大写的字母//去掉重复的字符串list=list.stream().filter(str ->str.length()>3) //保留的条件.filter(str ->str.charAt(0)>='A'&&str.charAt(0)<='Z').distinct() //去重,用equals判断.collect(Collectors.toList());System.out.println(list);List<Integer>collect=list.stream().map(String::length).collect(Collectors.toList());System.out.println(collect);}
//输出[Saaaa, Lxxx]
//[5, 4]
不能认为每一步是直接依次执行的。Stream会先记录每一步操作,而不是直接开始执行内容,当整个链式调用完成后,才会依次执行,也就是说需要的时候,工厂的机器才会按照预定的流程启动。
生成随机数:
public static void main(String[] args){Random random=new Random();random.ints(-100,100).limit(10).filter(i -> i<0) //只保留小于0的数字.sorted() //默认从小到大排序.forEach(System.out::println);}
Collections工具类
Arrays是一个用于操作数组的工具类
Collections类是专用于集合的工具类
常用方法:
public static void main(String[] args){List list1=new ArrayList<>(Arrays.asList(1,4,5,2,9,0));//求最大值最小值Collections.max(list1);Collections.min(list1);//对集合进行二分搜索(注意:集合的具体类型必须是实现Comparable接口的类)Collections.sort(list1);System.out.println(Collections.binarySearch(list1,4));
//输出3//对集合的元素进行快速填充,注意这个填充是对集合中的已有元素进行覆盖//如果集合中本身没有元素,那么fill操作不会生效Collections.fill(list1,0);System.out.println(list1);
//输出[0, 0, 0, 0, 0, 0]//emptyXXX快速生成一个只读的空集合List<Integer>list2=Collections.emptyList();//Collections.singletonList()会生成一个只有一个元素的Listlist2.add(10); //不支持,会直接抛出异常//将一个可修改的集合变成只读的集合:List<Integer>list3=new ArrayList<>(Arrays.asList(1,3,3,24));List<Integer>newList=Collections.unmodifiableList(list3);newList.add(10); //不支持,会抛出异常//寻找子集合的位置System.out.println(Collections.indexOfSubList(list3,Arrays.asList(3,3)));
//输出1}
由于泛型机制上的一些漏洞,实际上对应类型的集合类有可能会存放其他类型的值,泛型的检查值存在于编译阶段,我们只要绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这些问题就是在运行时进行类型检查:
public static void main(String[] args){List list1=new ArrayList<>(Arrays.asList(1,4,5,2,9,0));list1=Collections.checkedList(list1,Integer.class);list1.add("aaa");System.out.println(list1);}
//在输出时会报错