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

相关推荐
时光追逐者22 分钟前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb
一弓虽27 分钟前
SpringBoot 学习
java·spring boot·后端·学习
genggeng不会代码2 小时前
用于协同显著目标检测的小组协作学习 2021 GCoNet(总结)
学习
搞机小能手2 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
The_cute_cat5 小时前
25.4.22学习总结
学习
冰茶_5 小时前
.NET MAUI 发展历程:从 Xamarin 到现代跨平台应用开发框架
学习·microsoft·微软·c#·.net·xamarin
帅云毅6 小时前
Web3.0的认知补充(去中心化)
笔记·学习·web3·去中心化·区块链
豆豆6 小时前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
nenchoumi31196 小时前
VLA 论文精读(十六)FP3: A 3D Foundation Policy for Robotic Manipulation
论文阅读·人工智能·笔记·学习·vln
凉、介6 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci