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

相关推荐
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__4 小时前
Web APIs学习 (操作DOM BOM)
学习
数据的世界016 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐6 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO9 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A9 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒9 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash310 小时前
提升专业素养的实用指南
学习·职场和发展
1 9 J10 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
6.9411 小时前
Scala——身份证号码查询籍贯
学习·scala