自用 Java 学习 IO流前总结(Stream流)

可变参数

可变参数用在方法的形式参数的位置,它可以看做是一个数组,可以接收多个实际参数。

public static void main(String[] args){
    int sum1=getSum(3,4,5); //求3,4,5的和
    
    int sum2=getSum(1,2,3,4,5,6); //求1,2,3,4,5,65的和
    
    int[] array={1,2,3,4,5,6};
    int sum2=getSum(array); //求1,2,3,4,5,65的和
}

//求任意几个数的和
//int... array : 可变参数,可以接收多个int类型的值
public static int getSum(int... array){
    int sum=0;
    for(int i=0;i<array.length;i++){
        sum+=array[i];
    }
    return sum; 
}

LIst、Set、Map接口都提供了一个方法of,可以生成一个不可变的集合,同时添加任意多个元素

List<String> list2 = List.of("hello", "world", "java");
System.out.println(list2);

Set<String> set = Set.of("hello", "java", "world");
System.out.println(set);

Map<String, Integer> map = Map.of("张三", 20, "李四", 30, "王五", 40);
System.out.println(map);

Stream流

JDK8提供了Stream流用来对集合或者数组进行操作,使用Stream流需要经过下面的几个步骤

1.获取流  (创建流水线)

1.单列集合获取流
    Stream  strem=集合对象.stream();
    
2.双列集合获取流
    //键集,获取流
    Stream keyStream=map.keySet().stream();
    
    //值集,获取流
    Stream valueStream=map.values().stream();
    
    //键值对集,获取流
    Stream entryStream=map.entrySet().stream(); 

3.数组获取流、同一个类型的多个数据获取流
    Integer[] array={1,2,3,4,5};
    //数组获取流
    Stream arrayStream1=Stream.of(array);
    Stream arrayStream2=Stream.of(1,2,3,4,5);
    
    //数组获取流
    Stream stream = Arrays.stream(数组);


2.中间操作 (流水线操作环节)

fliter: 对元素进行过滤
limit: 截取前面n个元素
skip: 跳过前面n个元素
distinct: 去除重复元素

map: 对流中的元素进行转换

concat: 把两个流合并为1个流
        Stream<Integer> stream1=List.of(1,2,3,4).stream();
        Stream<Integer> stream2=List.of(5,6,7,8).stream();

    举例: 把stream1和stream2合并为1个流
        Stream stream3=Stream.concat(stream1,stram2)


3.终结操作 (流水线上的最后环节)

forEach: 遍历元素
count:  统计个数

collect: 收集剩余的元素到新的集合
    toList: 把元素放到List集合中
    toSet:  把元素放到Set集合中
    toMap:  把元素放到Map集合
        需要给定2个Lambda表达式,分别表示键和值

Stream流练习

需求:
    1.创建一个集合,存储10个学生对象
    2.保留年龄大于20的学生
    3.跳过前面2个
    4.截取前面4个
    5.把剩下的所有学生的年龄加10岁
    6.测试下面终极方法的使用
       1)遍历输出所有剩余元素的姓名和年龄
       2)把所有学生对象收集到List集合中
       3)把所有学生对象收集到Set集合中
       4)把所有学生对象收集到Map集合中,键:姓名、值:年龄

ArrayList<Student> list=new ArrayList<>();
list.add(new Student("张三",20));
list.add(new Student("李四",18));
list.add(new Student("王五",19));
list.add(new Student("赵六",25));
list.add(new Student("前妻",27));
list.add(new Student("王炸",28));
list.add(new Student("小王",26));
list.add(new Student("大王",24));
list.add(new Student("蘑菇头",23));
list.add(new Student("妹爷",29));
list.add(new Student("老王",30));
list.add(new Student("老李",22)); 

//演示Stream流的过滤、跳过、截取、转换、遍历功能
list.stream()
    .filter(s -> s.getAge() > 20)  //过滤年龄>20的学生
    .skip(2) //跳过前面2个
    .limit(4) //截取前面4个
    .map(s -> new Student(s.getName(), s.getAge() + 10))
    .forEach(s -> System.out.println(s));

//由于终结方法只能调用一个,可以尝试调用一个,注释掉再调用下一个
	//.collect(Collectors.toList());  //收集成List集合
    //.collect(Collectors.toSet());	//收集成Set集合
    //.collect(Collectors.toMap(s -> s.getName(), s -> s.getAge()));

上一篇:Stream的常见用法


下一篇:对集合操作的Stream类