java基础-stream流练习

练习一:

复制代码
package Day03;

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

public class StreamPractice01 {
    public static void main(String[] args) {
        //定义一个集合,存储整数1,2,3,4,5,6,7,8,9,10
        //过滤掉奇数,只保留偶数
        //并把结果存起来
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        //Stream流
        List<Integer> collect = list.stream()
                .filter(s -> s % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(collect);
    }
}

练习二:

复制代码
package Day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamPractice02 {
    public static void main(String[] args) {
        //
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");
        Map<String, Integer> collect = list.stream()
                .filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
        System.out.println(collect);
    }
}
复制代码
package Day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamPractice03 {
    public static void main(String[] args) {
        //创建一个男演员的集合
        ArrayList<Actor> actorMan = new ArrayList<>();
        //创建一个女演员的集合
        ArrayList<Actor> actorWoman = new ArrayList<>();
        Collections.addAll(actorMan,new Actor("刘昊然",21),
                new Actor("张成",22),
                new Actor("侯昊",23),
                new Actor("王安宇",24),
                new Actor("林一",25),
                new Actor("王鹤棣",26));
        Collections.addAll(actorWoman,new Actor("赵丽颖",21),
                new Actor("杨幂",22),
                new Actor("迪丽热巴",23),
                new Actor("杨澜",24),
                new Actor("杨紫",25),
                new Actor("赵露思",26));
        //1、男演员只要名字为3个字的前面两个人
        List<Actor> listMan = actorMan.stream()
                .filter(s -> s.getName().length() == 3)
                .limit(2)
                .collect(Collectors.toList());
        //2、女演员只要姓杨,并且不要第一个
        List<Actor> listWoman = actorWoman.stream()
                .filter(s -> s.getName().startsWith("杨"))
                .skip(1)
                .collect(Collectors.toList());
        //这样分开会代码更清晰一点
//        Stream.concat(listMan.stream(),listWoman.stream())
//                .forEach(s-> System.out.println(s.getName()+","+s.getAge()));

        //当然也可以整在一起,就是天书
        Stream.concat(actorMan.stream()
                .filter(s -> s.getName().length() == 3)
                .limit(2),
                actorWoman.stream()
                        .filter(s -> s.getName().startsWith("杨"))
                        .skip(1))
                .forEach(s -> System.out.println(s.getName()+" "+s.getAge()));

    }
}

上面是理解错题目的意思了,正确的是下面

复制代码
package Day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamPractice03 {
    public static void main(String[] args) {
        //创建一个男演员的集合
        ArrayList<String> actorMan = new ArrayList<>();
        //创建一个女演员的集合
        ArrayList<String> actorWoman = new ArrayList<>();
        Collections.addAll(actorMan,"刘昊然,22","张成,22","侯昊,23","王安宇,24","林一,25","王鹤棣,26");
        Collections.addAll(actorWoman,"赵丽颖,21","杨幂,22","迪丽热巴,23","杨澜,24","杨紫,25","赵露思,26");
        //1、男演员只要名字为3个字的前面两个人
        actorMan.stream()
                .filter(s->s.split(",")[0].length()==3)
                .limit(2);

        //2、女演员只要姓杨,并且不要第一个
        actorWoman.stream()
                .filter(s->s.startsWith("杨"))
                .skip(1);
        //3、把过滤后的男女演员合在一起
        Stream.concat(
                actorMan.stream()
                        .filter(s->s.split(",")[0].length()==3)
                        .limit(2),
                actorWoman.stream()
                        .filter(s->s.startsWith("杨"))
                        .skip(1));
                        //.forEach(s-> System.out.println(s));
        //4、把上面一步的数据封装成一个Actor对象
        //类型转化用Map
        Stream.concat(
                actorMan.stream()
                        .filter(s->s.split(",")[0].length()==3)
                        .limit(2),
                actorWoman.stream()
                        .filter(s->s.startsWith("杨"))
                        .skip(1))
                .map(s->new Actor(s.split(",")[0],Integer.parseInt(s.split(",")[1])));
                //.forEach(s-> System.out.println(s));
        //5、把上面的再放到list集合中
        List<Actor> list = Stream.concat(
                        actorMan.stream()
                                .filter(s -> s.split(",")[0].length()==3)
                                .limit(2),
                        actorWoman.stream()
                                .filter(s -> s.startsWith("杨"))
                                .skip(1))
                .map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1])))
                .collect(Collectors.toList());
        System.out.println(list);
    }
}

从上面可以看出,一步步之后,stream就会变的越来越复杂

相关推荐
皮皮林5515 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河5 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程8 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
孟健8 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
躺平大鹅10 小时前
Java面向对象入门(类与对象,新手秒懂)
java
码路飞10 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
初次攀爬者10 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺10 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot