Java教程

JAVA学习笔记22 Stream流

本文主要是介绍JAVA学习笔记22 Stream流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在这里插入图片描述

Stream流的使用

生成流
	通过数据源(集合,数组等)生成流
	list.stream()
中间操作
	一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用
	filter()
终结操作
	一个流只能有一一个终结操作,当这个操作执行后,流就被使用"光"了,无法再被操作。所以这必定是流的最后一个操作
	forEach()

Stream流的常见生成方式

  • Collection体系的集 合可以使用默认方法stream()生成流 default Stream stream()
  • Map体系的集合间接的生成流
  • 数组可以通过Stream接口的静态方法of… values)生成流
public class StreamDemo {
    public static void main(String[] args) {
        //Collection体系的集合可以使用stream()生成流
        List<String> list = new ArrayList<String>();
        Stream<String> listStream = list.stream();

        Set<String> set = new HashSet<String>();
        Stream<String> setStream = set.stream();

        //Map体系的集合间接生成流
        Map<String, Integer> map = new HashMap<String, Integer>();
        Stream<String> keyStream = map.keySet().stream();//键对应的流
        Stream<Integer> valueStream = map.values().stream();//值对应的流
        Stream<Map.Entry<String,Integer>> entryStream = map.entrySet().stream();//键值对 对应的流

        //数组可以通过Stream接口的静态方法of (T... values)生成流
        String[] strArray={"hello","world","java"};
        Stream<String > strArrayStream=Stream.of(strArray);
        Stream<String>  strArrayStream1=Stream.of("hello","world","java");
        Stream<Integer> strArrayStream2=Stream.of(10,20,30);
    }
}

Stream流操作之Filter使用方法

public class FilterDemo {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<String>();

        list.add("张耿");
        list.add("张曼玉");
        list.add("张三丰");
        list.add("张无忌");
        list.add("小龙女");
        list.add("尹志平");

        //把"张"字开头的元素在控制台输出
        list.stream().filter((String s)->{
            return s.startsWith("张");
        }).forEach(System.out::println);

        System.out.println("-------");

        //把长度为3的元素输出
        list.stream().filter((String s)->{
            return s.length()==3;
        }).forEach(System.out::println);

        System.out.println("--------");

        //张开头且长度为3的输出
        list.stream().filter((String s)->{
            return s.length()==3;
        }).filter((String s)->{
            return s.startsWith("张");
        }).forEach(System.out::println);
    }
}

Stream流操作之limit&skip使用方法

public class limitSkipDemo {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<String>();

        list.add("张耿");
        list.add("张曼玉");
        list.add("张三丰");
        list.add("张无忌");
        list.add("小龙女");
        list.add("尹志平");

        //需求1:取前3个数据在控制台输出
        list.stream().limit(3).forEach(System.out::println);
        System.out.println("-------");
        //需求2:跳过3个元素,把剩下的元素在控制台输出
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("-------");
        //需求3:跳过2个元素,把剩下的元素中前2个在控制台输出
        list.stream().skip(2).limit(3).forEach(System.out::println);
    }
}

### Stream流操作之concat&distinct使用方法

public class concatDistinctDemo {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<String>();

        list.add("张耿");
        list.add("张曼玉");
        list.add("张三丰");
        list.add("张无忌");
        list.add("小龙女");
        list.add("尹志平");

        //需求1:取前4个数据组成一个流
        Stream<String> s1=list.stream().limit(4);

        //需求2:跳过2个数据组成一个流
        Stream<String> s2=list.stream().skip(2);

        //需求3:合并需求1和需求2得到的流,并把结果在控制台输出
//        Stream.concat(s1,s2).forEach(System.out::println);
        System.out.println("-------");

        //需求4:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复
        Stream.concat(s1,s2).distinct().forEach(System.out::println);

    }

}

### Stream流操作之sort使用方法

public class sortDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();

        list.add("张耿");
        list.add("张曼玉");
        list.add("张三丰");
        list.add("张无忌");
        list.add("小龙女");
        list.add("尹志平");

//        list.stream().sorted().forEach(System.out::println);

        list.stream().sorted((s1, s2) -> {
            int num = s1.length() - s2.length();
            int num2 = num == 0 ? s1.compareTo(s2) : num;//如果长度一样那么就比较首字母的顺序
            return num2;
        }).forEach(System.out::println);
    }

}

### Stream流操作之map使用方法

public class mapDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();

        list.add("11");
        list.add("22");
        list.add("33");
        list.add("44");
        list.add("55");
        list.add("66");

        //需求:将集合中的字符串数据转换为整数之后在控制台输出
//        list.stream().map((String s)->{
//            return Integer.parseInt(s);
//        }).forEach(System.out::println);

        int resule = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(resule);
    }

}

### Stream流操作之forEach&count使用方法

  • void forEach(Consumer action):对此流的每个元素执行操作
  • long count0:返回此流中的元素数
package Stream;

import java.util.ArrayList;

public class forEachCountDemo {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<String>();

        list.add("张耿");
        list.add("张曼玉");
        list.add("张三丰");
        list.add("张无忌");
        list.add("小龙女");
        list.add("尹志平");

        //需求1:把集合中的元素在控制台输出
//        list.stream().forEach(System.out::println);

        //需求2:统计集合中有几个以张开头的元素,并把统计结果在控制台输出
        long count =list.stream().filter((String s)->{
            return s.startsWith("张");
        }).count();

        System.out.println(count);

    }
}

在这里插入图片描述

package Stream.Practise;

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

public class StreamPractice {
    public static void main(String[] args) {
        ArrayList<String> manlist = new ArrayList<>();
        manlist.add("周润发");
        manlist.add("刘德华");
        manlist.add("大润发");
        manlist.add("周发发");
        manlist.add("李哈哈");
        manlist.add("吴京");

        ArrayList<String> womanlist = new ArrayList<>();
        womanlist.add("张柏芝");
        womanlist.add("张心如");
        womanlist.add("张青霞");
        womanlist.add("柳岩");
        womanlist.add("张志玲");
        womanlist.add("王祖贤");

        Stream<String> manStream = manlist.stream().filter((String s) -> {
            return s.length() == 3;
        }).limit(3);

        Stream<String> womanStream=womanlist.stream().filter(s->s.startsWith("张"));

        Stream<String> compel=Stream.concat(womanStream,manStream);

        compel.map(Actor::new).forEach(s-> System.out.println(s.getName()));
    }
}

执行结果:
在这里插入图片描述

这篇关于JAVA学习笔记22 Stream流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!