学习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

相关推荐
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习