学习JAVA的第十七天(基础)

目录

不可变集合

Stream流

中间方法

终结方法

方法引用

引用静态方法

引用成员方法

引用构造方法


前言: 学习JAVA的第十六天(基础)-CSDN博客

不可变集合

就是不能被修改的集合,长度和内容都不能修改。

测试类

java 复制代码
public static void main(String[] args) {
        //创建不可变的List集合
        List<String> list = List.of("aa", "bb", "cc", "dd");

        //无法修改,只能查询
        System.out.println(list.get(0));//aa
        System.out.println(list.get(1));//bb
        System.out.println(list.get(2));//cc
        System.out.println(list.get(3));//dd

        //创建不可变的Set集合
        Set<String> set = Set.of("aa", "bb", "cc", "dd");

        //增强for遍历元素
        for (String s : set) {
            System.out.println(s);
        }
        //Lambda表达式遍历
        set.forEach(s -> System.out.println(s));

        //创建不可变的Map集合
        Map<String, String> map = Map.of("aa", "bb", "cc", "dd");

        //遍历Map集合
       Set<String> keys = map.keySet();
        for (String key : keys) {
          String  value = map.get(key);
          System.out.println(key+"="+value);//cc=dd aa=bb
        }

        //键值对
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());//aa=bb cc=dd
        }

    }

Stream流

作用:

结合Lambda表达式,简化集合和数组的操作

步骤:

先得到一条Stream流,并将数据放上去

利用Stream流的API进行各种操作

测试类:

java 复制代码
public static void main(String[] args) {
        //单列数据实现Stream流
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"a","b","c","d","e");
        list.stream().forEach(s -> System.out.print(s));//abcde

        //双列集合实现Stream流
        HashMap<String,String> hmp = new HashMap<>();
        //添加元素
        hmp.put("1","2");
        hmp.put("11","22");
        hmp.put("111","222");
        hmp.put("1111","2222");
        hmp.put("11111","22222");
        //获取Stream流
        hmp.keySet().stream().forEach(s -> System.out.print(s));//111111111111111

        //数组获取Stream流
        int[] arr = {1,2,3,4,5,6,7,8,9};
        Arrays.stream(arr).forEach(s ->System.out.print(s));//123456789

        //零散数据获取Stream流
        Stream.of(1,2,3,4,5).forEach(s ->System.out.print(s));//12345
        Stream.of("a","b","c",4,5).forEach(s ->System.out.print(s));//abc45



    }

中间方法

方法名称 说明
filter() 过滤
limit() 获取前面几个元素
skip() 跳过前几个元素
distinct() 元素去重
concat() 合并a和b为一个流
map() 转换流中的数据类型

测试类:

java 复制代码
public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"吴邪","王月半","张起灵","解雨臣","张海客","张启山");

        //filter 过滤
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        }).forEach(s -> System.out.print(s));//张起灵张海客张启山

        //简化版 //张起灵张海客张启山
        list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.print(s));

        //Stream不会破坏原来的数据
        System.out.print(list);//[吴邪, 王月半, 张起灵, 解雨臣, 张海客, 张启山]

        //limit
        list.stream().limit(3).forEach(s -> System.out.print(s));//吴邪王月半张起灵
        //skip
        list.stream().skip(3).forEach(s -> System.out.print(s));//解雨臣张海客张启山

        //distinct
        Collections.addAll(list,"吴邪","吴邪");
        System.out.println(list);//[吴邪, 王月半, 张起灵, 解雨臣, 张海客, 张启山, 吴邪, 吴邪]
        list.stream().distinct().forEach(s ->System.out.print(s));//吴邪王月半张起灵解雨臣张海客张启山

        //concat
        ArrayList<String> list2 = new ArrayList<>();
        Collections.addAll(list2,"吴三省","吴二白");
        System.out.println(list2);//[吴三省, 吴二白]
        //吴邪王月半张起灵解雨臣张海客张启山吴邪吴邪吴三省吴二白
        Stream.concat(list.stream(),list2.stream()).forEach(s -> System.out.print(s));

        //map
        ArrayList<String> list3 = new ArrayList<>();
        Collections.addAll(list3,"zaq-123","csw-456","cde-789");
        //123456789
        list3.stream().map(s -> Integer.parseInt(s.split("-")[1])).forEach(s ->System.out.print(s));
    }

终结方法

名称 说明
forEach() 遍历
count() 统计
toArray() 收集流中的数据,放入数组中
collect() 收集流中的数据,放入集合中

测试类:

java 复制代码
  public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"吴邪","王月半","张起灵","解雨臣","张海客","张启山");

        //遍历forEach
        list.stream().forEach(s -> System.out.print(s));//吴邪王月半张起灵解雨臣张海客张启山

        //count统计
        System.out.println(list.stream().count());//6

        //toArray
        System.out.println(Arrays.toString(list.stream().toArray()));//[吴邪, 王月半, 张起灵, 解雨臣, 张海客, 张启山]

    
    }

方法引用

把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体

要求:

引用处必须是函数式接口

被引用的方法必须存在

被引用的方法的形参和返回值需要和抽象方法保持一致

被引用的方法满足当前要求

方法引用符: ::

引用静态方法

格式: 类名**::**静态方法

引用成员方法

格式: 对象**::**成员方法

**其他类:**其他类对象::方法名

**本类:**this::方法名

**父类:**super::方法名

引用构造方法

格式: 类名**::**new

相关推荐
一棵开花的树,枝芽无限靠近你5 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
VertexGeek24 分钟前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
二进制_博客1 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink
codebolt1 小时前
ADS学习记录
学习
Komorebi.py2 小时前
【Linux】-学习笔记05
linux·笔记·学习
朝九晚五ฺ10 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
猫爪笔记11 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
pq113_612 小时前
ftdi_sio应用学习笔记 3 - GPIO
笔记·学习·ftdi_sio
澄澈i12 小时前
设计模式学习[8]---原型模式
学习·设计模式·原型模式
爱米的前端小笔记13 小时前
前端八股自学笔记分享—页面布局(二)
前端·笔记·学习·面试·求职招聘