Java流Stream使用详解(练习)

  • 练习

第一题 数据过滤

定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数,并将结果保存起来

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

public class DataFilter {
    public static void main(String[] args) {
        /*
         * 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10
         * 过滤奇数,只留下偶数,并将结果保存起来
         */

        // 创建集合
        List<Integer> list = new ArrayList<>();
        // 添加元素
        Collections.addAll(list, 1,2,3,4,5,6,7,8,9,10);

        // 过滤奇数
        List<Integer> newList = list.stream().filter(i -> i % 2 != 1).collect(Collectors.toList());
        System.out.println(newList);
    }
}

第二题 数据操作

创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄

“zhangsan,23”

“lisi,24”

“wangwu,25”

保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值

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

public class DataOpratorate {
    public static void main(String[] args) {
        /*
         * 创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄
         *  “zhangsan,23”
         *   “lisi,24”
         *   “wangwu,25”
         *   保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
         */

        // 创建列表
        ArrayList<String> list = new ArrayList<>();
        // 添加元素
        Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25", "zhubajie,1322", "sunwukong,800");

        // 过滤:保留大于24岁的人
        // 收集:姓名为键,年龄为值
        Map<String, Integer> map = list.stream().filter(s -> Integer.valueOf(s.split(",")[1]) > 24).collect(Collectors.toMap(
                s -> s.split(",")[0],
                s -> Integer.valueOf(s.split(",")[1])
        ));
        // 打印
        System.out.println(map);
    }
}

第三题 数据操作

现在有两个ArrayList集合,

第一个集合中:存储6名男演员的名字和年龄。

第二个集合中:存储6名女演员的名字和年龄。

姓名和年龄中间用逗号隔开。比如:张三,23

要求完成如下的操作:

1,男演员只要名字为3个字的前两人

2,女演员只要姓杨的,并且不要第一个

3,把过滤后的男演员姓名和女演员姓名合并到一起

4,将上一步的演员信息封装成Actor对象。

5,将所有的演员对象都保存到List集合中。

备注:演员类Actor,属性只有二个:name,age

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ActorStreamDemo {
    public static void main(String[] args) {
        /*
        现在有两个ArrayList集合,
        第一个集合中:存储6名男演员的名字和年龄。
        第二个集合中:存储6名女演员的名字和年龄。
        姓名和年龄中间用逗号隔开。比如:张三,23
        要求完成如下的操作:
        1,男演员只要名字为3个字的前两人
        2,女演员只要姓杨的,并且不要第一个
        3,把过滤后的男演员姓名和女演员姓名合并到一起
        4,将上一步的演员信息封装成Actor对象。
        5,将所有的演员对象都保存到List集合中。
        备注:演员类Actor,属性只有二个:name,age
         */
        // 男演员
        ArrayList<String> actors = new ArrayList<>();
        // 女演员
        ArrayList<String> actress = new ArrayList<>();
        // 添加元素
        Collections.addAll(actors, "旺财一,25", "张德,23", "朱思渺,38", "刘行,72", "王美雄,54", "黄得壮,48");
        Collections.addAll(actress, "杨二小,26", "武连连,33", "刘美,58", "程天天,21", "李红,38", "杨美美,36");

        //1,男演员只要名字为3个字的前两人
        List<String> actorsWith3digitsLimit2 = actors.stream().filter(s -> s.split(",")[0].length() == 3).limit(2).collect(Collectors.toList());
        //System.out.println(actorsWith3digitsLimit2);

        //2,女演员只要姓杨的,并且不要第一个
        List<String> yangActress = actress.stream().filter(s -> s.startsWith("杨")).skip(1).collect(Collectors.toList());
        //System.out.println(yangActress);

        //3.合并
        List<String> concatedList = Stream.concat(actorsWith3digitsLimit2.stream(), yangActress.stream()).collect(Collectors.toList());
        //System.out.println(concatedList);

        //4-1,将上一步的演员信息封装成Actor对象。
       concatedList.stream().map(new Function<String, Actor>() {
           @Override
           public Actor apply(String s) {
               String[] split = s.split(",");
               return new Actor(split[0], Integer.valueOf(split[1]));
           }
       }).forEach(actor -> System.out.println(actor));

        //4-2,lambda将上一步的演员信息封装成Actor对象。
        concatedList.stream().map(s -> new Actor(s.split(",")[0], Integer.valueOf(s.split(",")[1])))
                .forEach(actor -> System.out.println(actor));

        //5,将所有的演员对象都保存到List集合中。
        List<Actor> ActorObjList = concatedList.stream().map(s -> new Actor(s.split(",")[0], Integer.valueOf(s.split(",")[1])))
                .collect(Collectors.toList());
        System.out.println(ActorObjList);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐骁虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值