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

相关推荐
z樾2 小时前
Github界面学习
学习
道爷我悟了2 小时前
Vue入门-指令学习-v-html
vue.js·学习·html
计算机学姐3 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
彤银浦4 小时前
python学习记录7
python·学习
少女忧4 小时前
51单片机学习第六课---B站UP主江协科技
科技·学习·51单片机
邓校长的编程课堂5 小时前
助力信息学奥赛-VisuAlgo:提升编程与算法学习的可视化工具
学习·算法
missmisslulu5 小时前
电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!
学习·ios·电脑·平板
yunhuibin6 小时前
ffmpeg面向对象——拉流协议匹配机制探索
学习·ffmpeg
hengzhepa6 小时前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
蜡笔小新星6 小时前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习