Stream API的学习与简单使用---随笔

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class StreamDemo {

    /**
     * 使用数组创建stream对象
     */
    public static void array(){
        String[] strArr = {"A", "B", "C", "D", "E"};
        Stream<String> stream = Stream.of(strArr);
        stream.forEach(System.out::println);
    }

    /**
     * 使用list创建stream对象
     */
    public static void list(){
        List<String> list = Arrays.asList("1", "2", "3", "6", "5");
        Stream<String> stream = list.stream();
        stream.forEach(System.out::println);
    }

    /**
     * Stream.generate
     */
    public static void generate(){
        Stream<Integer> generate = Stream.generate(() -> 1);
        //打印10次 1
        generate.limit(10).forEach(System.out::println);
    }

    /**
     * Stream.iterate
     */
    public static void iterate(){
        Stream<Integer> iterate = Stream.iterate(1, x -> x + 1);
        iterate.limit(10).forEach(System.out::println);
    }

    /**
     * string生成
     */
    public static void string(){
        String str = "qwertyuiopasdfghj";
        IntStream chars = str.chars();
        chars.forEach(System.out::println);
    }

    public static void main(String[] args) {
        /************  Stream生成操作  *************/
//        array();
//        list();
//        generate();
//        iterate();
//        string();

        /******************   中间操作  *************/
        //如果调用方法后返回的是Stream对象,那么意味着这个操作就是中间操作
//        Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter((x)-> x%2==0).forEach(System.out::println);

        //求出结果集中所有的偶数和
//        int sum = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9).stream().filter((x) -> x % 2 == 0).mapToInt(x -> x).sum();
//        System.out.println(sum);

        //求集合中的最大值
//        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 8);
//        Optional<Integer> max = list.stream().max((a, b) -> a - b);
//        System.out.println(max.get());
        //求集合最小值
//        int min = list.stream().min((a, b) -> a  - b).get();
//        System.out.println(min);

//        Optional<Integer> any = list.stream().filter((x) -> x % 2 == 0).findAny();
//        System.out.println(any.get());
//
//        Optional<Integer> first = list.stream().filter((x) -> x % 2 == 0).findFirst();
//        System.out.println(first.get());

//        Stream<Integer> integerStream = list.stream().filter(i -> {
//            System.out.println("运行代码中....");
//            return i % 2 == 0;
//        });

        //打印不会执行
//        System.out.println(integerStream);
        //打印会执行, 只有再执行终止操作时,中间逻辑操作才会执行
//        System.out.println(integerStream.findFirst().get());

        //不适用min和max 方法获取最大值、最小值   默认排序--升序
//        Optional<Integer> min = list.stream().sorted().findFirst();
//        System.out.println(min.get());

        //自定义排序--降序
//        Optional<Integer> max = list.stream().sorted((a, b) -> b - a).findFirst();
//        System.out.println(max.get());

        //自然排序  字典顺序排序
//        Arrays.asList("java", "c#", "python", "scala", "jeva").stream()
//                .sorted().forEach(System.out::println);

        //自定义按长度排序
//        Arrays.asList("java", "c#", "python", "scala", "jeva").stream()
//                .sorted((a, b) -> a.length()-b.length()).forEach(System.out::println);

        //将集合中的元素进行过滤,同时返回一个集合对象
//        List<Integer> collect = list.stream().filter((x) -> x % 2 == 0).collect(Collectors.toList());
//        collect.forEach(System.out::println);

        //去重操作
//        Arrays.asList(1, 1, 1, 2, 3, 3, 4, 6, 3, 4, 2, 8, 5, 6).stream().distinct().forEach(System.out::println);

        //利用set有序且唯一的特性进行去重
//        Arrays.asList(1, 1, 1, 2, 3, 3, 4, 6, 3, 4, 2, 8, 5, 6).stream().collect(Collectors.toSet()).forEach(System.out::println);

        //打印 21-30 这样的集合数据 skip:跳过其中指定个数的元素
//        Stream.iterate(1, x->x+1).limit(50).skip(20).limit(10).forEach(System.out::println);
//        Stream.iterate(21, x->x+1).limit(10).forEach(System.out::println);

        String str = "11,22,33,44,55";
//        System.out.println(Stream.of(str.split(",")).mapToInt((x)-> Integer.valueOf(x)).sum());
//        System.out.println(Stream.of(str.split(",")).mapToInt(Integer::valueOf).sum());
//        System.out.println(Stream.of(str.split(",")).map((x)-> Integer.valueOf(x)).mapToInt(x->x).sum());
//        System.out.println(Stream.of(str.split(",")).map(Integer::valueOf).mapToInt(x -> x).sum());

        //创建一组自定义对象
//        String str2 = "java,scala,python";
//        Stream.of(str2.split(",")).map(x->new Person(x)).forEach(System.out::println);
//        Stream.of(str2.split(",")).map(Person::new).forEach(System.out::println);
//        Stream.of(str2.split(",")).map(x->Person.build(x)).forEach(System.out::println);
//        Stream.of(str2.split(",")).map(Person::build).forEach(System.out::println);

        //将str中的每一个数值都打印出来,同时算出最终的求和结果
        System.out.println(Stream.of(str.split(",")).peek(System.out::println).mapToInt(Integer::valueOf).sum());

        //匹配
        //所有匹配
        boolean isAllMatch = Stream.of(str.split(",")).allMatch(x -> x.equals("11"));
        System.out.println(isAllMatch);
        //存在匹配的
        boolean isContain = Stream.of(str.split(",")).anyMatch(x -> x.equals("11"));
        System.out.println(isContain);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值