Stream流的介绍

stream流的作用:

针对集合进行功能的简化开发

package com.itheima.demo1;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo1 {
    public static void main(String[] args) {
        //集合
        List<String> list = new ArrayList<>();
        //存储元素
        list.add("张三疯");
        list.add("张三");
        list.add("熊大");
        list.add("张小小");

        //使用Stream流
        list.stream()
                .filter(name -> name.startsWith("张"))
                .filter(name -> name.length() == 3)
                .forEach(name -> System.out.println(name));

        /* 集合的传统解决方案:
         *  1、遍历list集合
         *     for(String name : list){
         *     2、判断元素是否以"张"开头 :  是 就把元素存储到另一个集合
         *     if(name.startWith("张")){
         *        新集合.add(元素)
         *     }
         *   }
         *  3、遍历 存储"张"开头的集合
         *  4、判断元素(字符串)的长度 == 3    是  就把元素存储到另一个集合
         *
         * */
    }
}

stream流的使用通常是要配合lambda表达式

Stream流的思想

类似于生产流水线的思想

过滤操作,剩余输出

获取Stream方法(创建一条流水线,把数据都放在流水线上准备工作)-中间方法(流水线上的操作,一次操作完成以后,还可以去继续进行其他操作)- 终结操作(一个stream流只有一个终结方法)

Stream 流方法的分类

1.获取方法(创建一个流水线)

2.中间方法(过滤,截取)

3.终结方法(关闭流水线)

获取Stream流对象

//单列集合

(Collection接口中的默认方法stream()生成流)

Collection(List , set)

//双列集合

Map

先通过keyset和entryset获取到set集合

不能直接获取流对象

//数组

Stream 流对象  =  Arrays.stream

//特殊的操作

package com.itheima.demo1;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo1 {
    public static void main(String[] args) {
        //集合
        List<String> list = new ArrayList<>();
        //存储元素
        list.add("张三疯");
        list.add("张三");
        list.add("熊大");
        list.add("张小小");

        //使用Stream流
        list.stream()
                .filter(name -> name.startsWith("张"))
                .filter(name -> name.length() == 3)
                .forEach(name -> System.out.println(name));

        /* 集合的传统解决方案:
         *  1、遍历list集合
         *     for(String name : list){
         *     2、判断元素是否以"张"开头 :  是 就把元素存储到另一个集合
         *     if(name.startWith("张")){
         *        新集合.add(元素)
         *     }
         *   }
         *  3、遍历 存储"张"开头的集合
         *  4、判断元素(字符串)的长度 == 3    是  就把元素存储到另一个集合
         *
         * */
    }
}

package com.itheima.demo2;

import java.util.*;
import java.util.stream.Stream;

//演示: 获取Stream流对象
public class StreamDemo1 {
    //Stream流的特殊操作: 把同一种类型的多个元素,转Stream流
    public static void method4(){
        Stream<String> stream = Stream.of("java", "mysql", "html");
    }


    //数组 => Stream流
    public static void method3(){
        Integer[] array ={1,2,3,4,5};

        //获取数组的Stream流对象
        Stream stream = Arrays.stream(array);

        System.out.println(stream);
    }

    //双列集合 => Stream流
    public static void method2(){
        Map<String,String> map = new HashMap<>();
        map.put("java","java基础");
        map.put("mysql","mysql入门");

        //获取Map集合的Stream流(不能直接获取)
        Stream<Map.Entry<String, String>> stream = map.entrySet().stream();

    }


    //单列集合 => Stream流
    public static void method1() {
        List<String> list = new ArrayList<>();
        Collections.addAll(list, "熊大", "能二", "光头强");

        //获取List集合的Stream流对象
        Stream<String> stream = list.stream();
        System.out.println(stream);
    }


    public static void main(String[] args) {
        method3();
    }
}


package com.itheima.demo3;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class StreamDemo1 {
    public static void main(String[] args) {
        //集合
        List<String> list = new ArrayList<>();
        //存储元素
        list.add("张三疯");
        list.add("张三");
        list.add("熊大");
        list.add("张小小");

        //获取集合中所有的姓张的元素,并打印
//        Stream<String> stream1 = list.stream();
//        Stream<String> stream2 = stream1.filter(name -> name.startsWith("张"));
//        stream2.forEach( name -> System.out.println(name) );
        list.stream()
                .filter(name -> name.startsWith("张"))
                .forEach(name -> System.out.println(name));
    }
}


package com.itheima.demo4;

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

public class StreamDemo {
    public static void main(String[] args) {
        //集合
        List<String> list = new ArrayList<>();
        //存储元素
        list.add("张三疯");
        list.add("张三");
        list.add("熊大");
        list.add("张小小");

        //演示: 中间方法 limit
        list.stream()
                .skip(1) //指定跳过多少个数据
                .limit(2) //截取指定个数的数据
                .forEach(name-> System.out.println(name));

    }
}



package com.itheima.demo5;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        //集合
        List<String> list1 = new ArrayList<>();
        //存储元素
        list1.add("张三疯");
        list1.add("张三");
        list1.add("张小小");

        List<String> list2 = new ArrayList<>();
        Collections.addAll(list2, "光头强", "张小小", "张老板");

        //第1个流对象
        Stream<String> stream1 = list1.stream();
        //第2个流对象
        Stream<String> stream2 = list2.stream();

        //合并流
        Stream<String> newStream = Stream.concat(stream2, stream1);


        newStream
                .distinct() //去除流中的重复元素(注意细节:流中存储的是自定义对象时,在自定义对象中要重写:hashCode、equals)
                .forEach(name -> System.out.println(name));
    }
}




package com.itheima.demo6;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class StreamDemo {
    public static void main(String[] args) {
        //集合
        List<User> list =new ArrayList<>();
        //集合中存储的元素是:User对象
        list.add(new User("张三"));

        list.stream()
                .map(user -> new SuperMan(user.getName()))//把User类型元素,转换为SuperMan类型元素
                .forEach(obj -> System.out.println(obj));


    }
}


package com.itheima.demo6;

public class SuperMan {
    private String name;

    public SuperMan() {
    }

    public SuperMan(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "SuperMan{" +
                "name='" + name + '\'' +
                '}';
    }
}



package com.itheima.demo6;

public class User {
    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}


package com.itheima.demo7;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class StreamDemo {
    public static void main(String[] args) {
        //集合
        List<Integer> list = new ArrayList<>();
        //存储元素
        Collections.addAll(list, 8,3,9,2,6);

        //使用stream流对集合进行排序
        list.stream()
                .sorted() //默认排序方式:自然排序
                .forEach(num -> System.out.print(num+"\t"));

        System.out.println();

        list.stream()
                .sorted( (num1,num2) -> num2-num1 ) //指定了比较器排序
                .forEach(num -> System.out.print(num+"\t"));

    }
}







  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值