Stream流、异常体系

本文介绍了Java中不可变集合的概念、创建方法及其好处,详细阐述了Stream流的使用,包括流的获取、常用API及收集操作。此外,还深入探讨了异常处理体系,包括编译时异常和运行时异常的区别,以及如何处理异常以增强代码的稳定性和健壮性。
摘要由CSDN通过智能技术生成

一、创建不可变集合

1、不可变集合概述

  • 不可变集合,就是不可被修改的集合
  • 集合的数据项在创建的时候提供,并且在整个生命周期中都不可以改变,否则报错

2.为什么创建不可变对象

  • 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践
  • 或者当集合对象被不可信任的库调用时,不可变形式是安全的

3.如何创建不可变集合

  • 在List、Set、Map接口中,都存在of方法,可以创建一个不可变集合
  • 这个集合不能添加,不能删除,不能修改
public class CollectionDemo {
   
    public static void main(String[] args) {
   
        //1.不可变的List集合
        List<Double> lists=List.of(569.5,700.5,523.0,570.5);
        System.out.println(lists);//[569.5, 700.5, 523.0, 570.5]
      //  lists.add("345.5");不能添加
      //  lists.set(2,698.5);
        //System.out.println(lists);//不能修改
        Double d=lists.get(1);
        System.out.println(lists);//[569.5, 700.5, 523.0, 570.5]
        System.out.println(d);//700.5
        //2.不可变Set集合
       // Set<String> names=Set.of("小花","小白","小兰","小哈","小白");
       // System.out.println(names);//出现异常IllegalArgumentException不能重复
        Set<String> names=Set.of("小花","小白","小兰","小哈");
        //names.add("小明");
        //System.out.println(names);//UnsupportedOperationException不可以添加元素
        //3.不可变Map集合
        Map<String,Integer> maps=Map.of("huawei",2,"Java开发",1,"手表",1);
        System.out.println(maps);//{手表=1, huawei=2, Java开发=1}
        maps.put("HTML",12);
        System.out.println(maps);//UnsupportedOperationException不能添加元素
    }
}

二、Stream流

1.Stream的概述

1.1Stream流的概述
  • 在Java中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念
  • 目的:用于简化集合和数组操作的API
1.2案例:体验Stream流的作用

在这里插入图片描述

public class StreamTest {
   
    public static void main(String[] args) {
   
        //初步体验Stream流的方便与快捷
        List<String> names=new ArrayList<>();
        Collections.addAll(names,"张小兰","张芳","张小花","小白","小花");
        System.out.println(names);
//        //1.将姓张的放在新集合
//        List<String> zhanglist=new ArrayList<>();
//        for(String name:names){
   
//            if(name.startsWith("张")){
   
//                zhanglist.add(name);
//            }
//        }
//        System.out.println(zhanglist);//[张小兰, 张芳, 张小花]
//        //2.找名称长度是3的张的姓名
//        List<String> zhangThreelist=new ArrayList<>();
//        for(String name:names){
   
//            if(name.startsWith("张")&&name.length()==3){
   
//                zhangThreelist.add(name);
//            }
//        }
//        System.out.println(zhangThreelist);//[张小兰, 张芳, 张小花]
        //3.使用Stream流实现
        names.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
        //张小兰
        //张小花
    }
}

1.3Stream流的思想
  • 先得到集合或者数组的Stream流(就是一根传送带)
  • 把元素放上去
  • 然后就用这个Stream流简化的API来方便的操作元素

2.Stream流的获取

1.1Stream流的三类方法

1.1.1获取Stream流

  • 创建一条流水线,并把数据放到流水线上准备进行操作

1.1.2中间方法

  • 流水线上的操作,一次操作完毕之后,还可以继续进行其它操作

1.1.3终结方法

  • 一个Stream流只能有一个终结方法,是流水线上的最后一个操作
1.2集合获取Stream流的方式
  • 可以使用Collection接口中默认方法Stream()生成流
default Stream<E> stream()//获取当前集合对象的Stream流
1.3数组获取Stream流的方式
public static <T> Stream<T> stream (T[] array) //|获取当前数组的Stream流
public static<T> Stream<T> of(T...value)//获取当前数组/可变数据的Stream流

public class StreamDemo2 {
   
    public static void main(String[] args) {
   
        /**------------Collection集合获取Stream流---------------*/
        Collection<String> list=new ArrayList<>();
        Stream<String> s = list.stream();
        /**------------Map集合获取流------------------*/
        Map<String,Integer> maps=new HashMap<>();
        //键流
        Stream<String> keyStream=maps.keySet().stream();
        //值流
       Stream valuesStream= maps.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> stream = maps.entrySet().stream();
        /**-------------数组获取流--------------*/
        String[] names={
   "小花","小红","小包"};
        Stream<String> nameStream = Arrays.stream(names);
        Stream<String> nameStream2=Stream.of(names);
    }
         }

3.Stream流的常用API(中间操作方法)

在这里插入图片描述
在这里插入图片描述

public class StreamDemo3 {
   
    public static void main(String[] args) {
   
        /*
        目标:Stream流常用API
        forEach:逐一处理(遍历)
        count:统计个数
        ---- long count();
        filter :过滤元素
        ---- Stream<T> filter(Predicate<? super T>predicate)
        limit:取前几个元素
        skip:跳过前几个
        map:加工方法
        concat:合并流
        distinct:去重复
         */
        List<String> list=new ArrayList<>();
        list.add("张小花");
        list.add("小红");
        list.add("张小百");
        list.add("张包");
        list.add("张小兰");
      //  list.add("张小兰");
        list.add("小花");

        //Stream<T> filter(Predicate<? super T> predicate);
//        list.stream().filter(new Predicate<String>() {
   
//            @Override
//            public boolean test(String s) {
   
//                return s.startsWith("张");
//            }
//        });
        list.stream().filter( s-> s.startsWith("张")).forEach(s-> System.out.println(s));
        //张小花
        //张小百
        //张包
        //张小兰
        list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
        //张小花
        //张小百
        //张小兰
        long size = list.stream().filter(s -> s.length() == 3).count();</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值