什么是可变参数?如何使用可变参数?为什么学习Stream流?Stream流思想是什么?怎么Stream流?Stream流的三类方法?获取方法特点?中间方法特点?常见中间方法?终结方法特点?常见终结方法?

                          ==知识梳理==

                          ==重难点梳理==                  

                         ==今日目标==

1.能够了解什么是可变参数

2.能够了解如何去创建不可变集合

3.能够掌握Stream流的使用

                         ==知识点==

1.可变参数

2.Stream流

                         ==超详细讲义==

1.可变参数

1.1可变参数【了解】

(共4点)

1.什么是可变参数(个数)

可变参数就是参数个数不确定,个数范围[0-N]

2.如何使用可变参数

1.可变参数定义的可格式

修饰符 返回值类型 方法名(数据类型... 变量名) {  }

2.可变参数的基本使用

package com.itheima.variableparameter;

/**
* 需求:定义一个方法求N个数的和
* 可变参数实现
*/
public class MyVariableParameter2 {
   public static void main(String[] args) {
//       int [] arr = {1,2,3,4,5};
//       System.out.println(arr);
       int sum1 = getSum(1, 2, 3, 4, 5);
       System.out.println(sum1);
  }

   public static int getSum(int number,int... arr) {
       //System.out.println(arr);
       int sum = 0;
       for (int i = 0; i < arr.length; i++) {
           sum = sum + arr[i];
      }
       return sum;
  }
}

3.可变参数使用时的注意事项

如果一个方法有多个参数,包含可变参数,可变参数要放在最后

4.可变参数的应用场景

当参数类型确定,个数不确定时使用,可以使用可变参数

1.2创建不可变集合【了解】

(共三点)

1.什么是不可变集合

不可变集合,顾名思义就是说集合是不可被修改(增、删、改)的。集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变

2.如何创建不可变集合(//回顾接口中的静态方法)

  • 方法介绍

    • 在List、Set、Map接口中,都存在of方法,可以创建一个不可变的集合

      • 这个集合不能添加,不能删除,不能修改

      • 但是可以结合集合的带参构造,实现集合的批量添加

    • 在Map接口中,还有一个ofEntries方法可以提高代码的阅读性

      • 首先会把键值对封装成一个Entry对象,再把这个Entry对象添加到集合当中

      示例代码

    package com.itheima.variableparameter;

    import java.util.*;

    public class MyVariableParameter4 {
       public static void main(String[] args) {
           // static <E> List<E> of(E…elements) 创建一个具有指定元素的List集合对象
           //static <E> Set<E> of(E…elements)   创建一个具有指定元素的Set集合对象
           //static <K , V>   Map<K,V> of(E…elements)
           //                                     创建一个具有指定元素的Map集合对象


           //method1();
           //method2();

           //method3();

           //method4();

      }

       private static void method4() {
           Map<String, String> map = Map.ofEntries(
                   Map.entry("zhangsan", "江苏"),
                   Map.entry("lisi", "北京"));
           System.out.println(map);
      }

       private static void method3() {
           Map<String, String> map = Map.of("zhangsan", "江苏", "lisi", "北京", "wangwu", "天津");
           System.out.println(map);
      }

       private static void method2() {
           //传递的参数当中,不能存在重复的元素。
           Set<String> set = Set.of("a", "b", "c", "d","a");
           System.out.println(set);
      }
       private static Set<String> method5(){
           Set<String> set = Set.of("a", "b", "c", "d");
           return set;
      }
       private static void method1() {
          /* List<String> list = List.of("a", "b", "c", "d");
           System.out.println(list);*/
           //list.add("Q");
           //list.remove("a");
           //list.set(0,"A");
           //System.out.println(list);

           /*ArrayList<String> list2 = new ArrayList<>();
           list2.add("aaa");
           list2.add("aaa");
           list2.add("aaa");*/
           //集合的批量添加。
           //首先是通过调用List.of方法来创建一个不可变的集合,of方法的形参就是一个可变参数。
           //再创建一个ArrayList集合,并把这个不可变的集合中所有的数据,都添加到ArrayList中。
           ArrayList<String> list3 = new ArrayList<>(List.of("a", "b", "c", "d"));
           System.out.println(list3);
      }
    }

2.Stream流

2.1Stream流-初体验【了解】

1.案例需求(对比)

按照下面的要求完成集合的创建和遍历

  • 创建一个集合,存储多个字符串元素

  • 把集合中所有以”张”开头的元素存储到一个新的集合

  • 把”张”开头的集合中的长度为3的元素存储到另一个新的集合

  • 遍历上一步得到的集合

2.为什么要使用流

Stream 对集合(Collection)对象功能的增强,专注于对集合对象进行各种非常便利、高效的操作,或者大批量数据操作 (bulk data operation)

示例代码

package com.itheima.streamdemo;

import java.util.ArrayList;
import java.util.List;

/**
* 体验Stream流
*
* 创建一个集合,存储多个字符串元素
* "张三丰","张无忌","张翠山","王二麻子","张良","谢广坤"
*
* 把集合中所有以"张"开头的元素存储到一个新的集合
*
*
* 把"张"开头的集合中的长度为3的元素存储到一个新的集合
* 遍历上一步得到的集合
*
*/
public class MyStream1 {
   public static void main(String[] args) {
       //集合的批量添加
       ArrayList<String> list1 = new ArrayList<>(List.of("张三丰","张无忌","张翠山","王二麻子","张良","谢广坤"));
       //list.add()

       //遍历list1把以张开头的元素添加到list2中。
       ArrayList<String> list2 = new ArrayList<>();
       for (String s : list1) {
           if(s.startsWith("张")){
               list2.add(s);
          }
      }

       //遍历list2集合,把其中长度为3的元素,再添加到list3中。
       ArrayList<String> list3 = new ArrayList<>();
       for (String s : list2) {
           if(s.length() == 3){
               list3.add(s);
          }
      }
       for (String s : list3) {
           System.out.println(s);
      }

       System.out.println("=======================");
      //Stream流
       list1.stream().filter(s->s.startsWith("张"))
              .filter(s->s.length() == 3)
              .forEach(s-> System.out.println(s));
  }
}

2.2Stream流的思想特点【重点、难点】

1.Stream流的思想(静水器过滤)

 

 

 

 

Stream流的三类方法

  • 获取Stream流

  • 中间方法

  • 终结方法

2.3 Stream流-获取方法 【重点】 

1.生成Stream流的方式

  • Collection体系集合

    使用默认方法stream()生成流, default Stream<E> stream()

  • Map体系集合

    把Map转成Set集合,间接的生成流

  • 数组

    通过Arrays中的静态方法stream生成流

  • 同种数据类型的多个数据

    通过Stream接口的静态方法of(T… values)生成流

代码演示

package com.itheima.streamdemo;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.stream.Stream;

/**
* Stream流的获取
单列集合 : 集合对象.stream();
双列集合 : 不能直接获取,需要间接获取
           集合对象.keySet().stream();
           集合对象.entrySet().stream();
数组     :
           Arrays.stream(数组名);

同种数据类型的多个数据:

           Stream.of(数据1,数据2,数据3......);

*/
public class MyStream2 {
   public static void main(String[] args) {
       //单列集合
       //method1();


       //双列集合
       //method2();

       //数组
       //method3();

       //同种数据类型的多个数据
       //method4();

  }

   private static void method4() {
       Stream.of(1,2,3,4,5,6,7,8).forEach(s-> System.out.println(s));
  }

   private static void method3() {
       int [] arr = {1,2,3,4,5};
       Arrays.stream(arr).forEach(s-> System.out.println(s));
  }

   private static void method2() {
       HashMap<String,Integer> hm = new HashMap<>();
       hm.put("zhangsan",23);
       hm.put("lisi",24);
       hm.put("wangwu",25);
       hm.put("zhaoliu",26);
       hm.put("qianqi",27);

       //双列集合不能直接获取Stream流
       //keySet
       //先获取到所有的键
       //再把这个Set集合中所有的键放到Stream流中
       //hm.keySet().stream().forEach(s-> System.out.println(s));


       //entrySet
       //先获取到所有的键值对对象
       //再把这个Set集合中所有的键值对对象放到Stream流中
       hm.entrySet().stream().forEach(s-> System.out.println(s));
  }

   private static void method1() {
       ArrayList<String> list = new ArrayList
版权声明:本文为859630097com原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/859630097com/p/14198013.html