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

相关推荐
thefool112266几秒前
多线程 3
java
CoderYanger7 分钟前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
papaofdoudou19 分钟前
从抽象群到可计算的矩阵:S₃ 的表示论与共轭视角
python·决策树·矩阵
liangbo723 分钟前
01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清
java
xuxigifxfh27 分钟前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考
Wokoo730 分钟前
自动化测试入门:核心场景、回归测试与 Web 自动化环境搭建
java·开发语言·测试工具
tachibana233 分钟前
Golang 中数组和切片的区别?
开发语言·后端·golang·数组·切片
我是人✓1 小时前
Spring IOC注解全解析和Spring整合测试单元
java·后端·spring
JWASX1 小时前
【agent 开发】Agent 智能体
大数据·人工智能·python
智购科技无人售货机工厂店1 小时前
玻璃瓶饮料破损率突然上升,排查发现是取货口缓冲垫老化了~YH
java·开发语言·人工智能·python·eclipse