6、java stream流练习

1、数字过滤

 /**
         * 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数。
         * 并将结果保存起来
         */
ArrayList<Integer> numbers = new ArrayList<>();
        Collections.addAll(numbers, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        List<Integer> collect = numbers.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());
        System.out.println(collect);

2、字符串过滤并手机

/**
         * 练习:
         * 创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄“zhangsan,23“lisi,24”
         * “wangwu,25”
         * 保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
         */
ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25");
        Map<String, String> stringMap = list.stream().filter(s -> 24 <= Integer.parseInt(s.split(",")[1])).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
        System.out.println(stringMap);

3、自定义对象收集并过滤

/**
         * 现在有两个ArrayList集合
         * 第一个集合中:存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄姓名和年龄中间用逗号隔开。比如:张三,23要求完成如下的操作:
         * 1,男演员只要名字为3个字的前两人
         * 2,女演员只要姓杨的,并且不要第一个
         * 3,把过滤后的男演员姓名和女演员姓名合并到一起
         * 4,将上一步的演员信息封装成Actor对象。
         * 将所有的演员对象都保存到List集合中
         * 备注:演员类Actor,属性只有一个: name,age
         */
ArrayList<String> boys = new ArrayList<>();
        ArrayList<String> girls = new ArrayList<>();
        Collections.addAll(boys, "李1,38", "范2宇,12", "王3来,34", "杨4亭,56", "毛5培,23");
        Collections.addAll(girls, "马1云,43", "杨帅2,18", "杨3航,28", "张4彬,32", "王5宇,23");
        Stream<String> stream1 = boys.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);
        Stream<String> stream2 = girls.stream().filter(s -> s.startsWith("杨")).skip(1);
//        List<Actor> collect1 = Stream.concat(stream1, stream2).map(new Function<String, Actor>() {
//            @Override
//            public Actor apply(String s) {
//                String name = s.split(",")[0];
//                Integer age = Integer.parseInt(s.split(",")[1]);
//                Actor actor = new Actor();
//                actor.setName(name);
//                actor.setAge(age);
//                return actor;
//            }
//        }).collect(Collectors.toList());
//        System.out.println(collect1);
//
//        System.out.println("-------------------优化完-----------------");

//        List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> {
//            Actor actor = new Actor();
//            actor.setName((s.split(",")[0]));
//            actor.setAge(Integer.parseInt(s.split(",")[1]));
//            return actor;
//        }).collect(Collectors.toList());
        List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> new Actor((s.split(",")[0]),Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());
        System.out.println(collect2);

完整代码

package com.leitao.demo.code;

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

/**
 * @Description: TODO
 * @Author Leo
 * @Date 2023/1/3
 * @Version V1.0
 **/
public class streamDemo5 {
    public static void main(String[] args) {

        /**
         * 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数。
         * 并将结果保存起来
         */
        ArrayList<Integer> numbers = new ArrayList<>();
        Collections.addAll(numbers, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        List<Integer> collect = numbers.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());
        System.out.println(collect);

        System.out.println("===================华丽的分割线===================");

        /**
         * 练习:
         * 创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄“zhangsan,23“lisi,24”
         * “wangwu,25”
         * 保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
         */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25");
        Map<String, String> stringMap = list.stream().filter(s -> 24 <= Integer.parseInt(s.split(",")[1])).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
        System.out.println(stringMap);

        System.out.println("===================华丽的分割线===================");

        /**
         * 现在有两个ArrayList集合
         * 第一个集合中:存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄姓名和年龄中间用逗号隔开。比如:张三,23要求完成如下的操作:
         * 1,男演员只要名字为3个字的前两人
         * 2,女演员只要姓杨的,并且不要第一个
         * 3,把过滤后的男演员姓名和女演员姓名合并到一起
         * 4,将上一步的演员信息封装成Actor对象。
         * 将所有的演员对象都保存到List集合中
         * 备注:演员类Actor,属性只有一个: name,age
         */
        ArrayList<String> boys = new ArrayList<>();
        ArrayList<String> girls = new ArrayList<>();
        Collections.addAll(boys, "李1,38", "范2宇,12", "王3来,34", "杨4亭,56", "毛5培,23");
        Collections.addAll(girls, "马1云,43", "杨帅2,18", "杨3航,28", "张4彬,32", "王5宇,23");
        Stream<String> stream1 = boys.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);
        Stream<String> stream2 = girls.stream().filter(s -> s.startsWith("杨")).skip(1);
//        List<Actor> collect1 = Stream.concat(stream1, stream2).map(new Function<String, Actor>() {
//            @Override
//            public Actor apply(String s) {
//                String name = s.split(",")[0];
//                Integer age = Integer.parseInt(s.split(",")[1]);
//                Actor actor = new Actor();
//                actor.setName(name);
//                actor.setAge(age);
//                return actor;
//            }
//        }).collect(Collectors.toList());
//        System.out.println(collect1);
//
//        System.out.println("-------------------优化完-----------------");

//        List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> {
//            Actor actor = new Actor();
//            actor.setName((s.split(",")[0]));
//            actor.setAge(Integer.parseInt(s.split(",")[1]));
//            return actor;
//        }).collect(Collectors.toList());
        List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> new Actor((s.split(",")[0]),Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());
        System.out.println(collect2);

    }
}
package com.leitao.demo.code;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @Description: TODO
 * @Author Leo
 * @Date 2023/1/4
 * @Version V1.0
 **/
@Data
@AllArgsConstructor
public class Actor {
    private String name;
    private Integer age;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值