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

相关推荐
草莓熊Lotso2 小时前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net
断剑zou天涯2 小时前
【算法笔记】树状数组IndexTree
java·笔记·算法
长安牧笛2 小时前
设计职场新人社交恐惧破冰工具,生成趣味自我介绍模板,团建互动小游戏,帮助新人快速融入团队。
python
黎雁·泠崖2 小时前
【C语言指针精讲】从内存到运算,吃透指针核心逻辑
c语言·开发语言
Paddy哥2 小时前
java 经典循环依赖解决
java
秦苒&2 小时前
【C语言指针四】数组指针变量、二维数组传参本质、函数指针变量、函数指针数组
c语言·开发语言·c++·c#
木泽八2 小时前
python实现pdf拆分与合并
服务器·python·pdf
秋雨雁南飞2 小时前
C# 字符串占位
开发语言·c#
拾贰_C2 小时前
[Python | pytorch | torchvision ] models like ResNet... 命名变量说明
开发语言·pytorch·python