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就会变的越来越复杂

相关推荐
lgcgkCQ17 分钟前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog21 分钟前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老29 分钟前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
tongyiixiaohuang1 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
中科三方1 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
卡提西亚1 小时前
FastAPI基础入门
python·fastapi
fanruitian1 小时前
python 机器学习 ML LinearRegression KNN KMeans
python·机器学习·kmeans
鱼宵1 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
卷无止境2 小时前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python
学长毕设2 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端