Stream API 小练习(map,filter)

文章展示了如何使用JavaStreamAPI的map和reduce方法来统计Employee对象的数量,以及如何通过filter和limit等操作对ArrayList进行筛选和组合。在示例中,map用于转换数据,reduce用于累加,filter用于条件筛选,而limit用于限制结果数量。
摘要由CSDN通过智能技术生成

例题一

怎样用 map 和 reduce 方法数一数流中有多少个Employee?

package Exer.exer18;

import Shang2149.exer.Employee;
import org.junit.jupiter.api.Test;

import java.util.*;
import java.util.stream.Stream;


public class MapTest {
    /*
     *
     * StreamAPI:
     *给定一个数字列表,如何返回一个由每个数的平方构成的列表呢?
     * 例如,给定【1,2,3,4,5】, 应该返回【1,4,9,16,25】。
     * */

    @Test
    public void test01() {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        Stream<Integer> stream = list.stream();
        stream.map(x -> x * x).forEach(System.out::println);


    }

    @Test
    public void test02() {
        /*
         * 怎样用 map 和 reduce 方法数一数流中有多少个Employee呢?
         * */
        List<Employee> emps = Arrays.asList(
                new Employee(102, "李四", 6666.66, 59),
                new Employee(101, "张三", 9999.99, 18),
                new Employee(103, "王五", 3333.33, 28),
                new Employee(104, "赵六", 7777.77, 48),
                new Employee(104, "赵六", 7777.77, 58),
                new Employee(104, "赵六", 7777.77, 68),
                new Employee(105, "田七", 5555.55, 38)
        );
        //方式一
        Optional<Integer> count = emps.stream().map((e) -> 1).reduce(Integer::sum);
        System.out.println(count.get());

        //方式二
        Stream<Employee> count1 = emps.stream();
        System.out.println(count1.count());
    }


}

其中方式一中的 (e) - > 1

表达的意思是每有一条数据,便 return 1.由最后的reduce方法使用sum收集。若改成2则返回值为双倍的元素数量。(个人理解)

例题二

现在有两个 ArrayList 集合存储队伍当中的多个成员姓名,
 要求使用Stream方式进行以下若干操作步骤:
  1. 第一个队伍只要名字为3个字的成员姓名;
  2. 第一个队伍筛选之后只要前4个人;
  3. 第二个队伍只要姓张的成员姓名;
  4. 第二个队伍筛选之后不要前1个人;
  5. 将两个队伍合并为一个队伍;
  6. 根据姓名创建Member对象;Member类型包含name属性
  7. 打印整个队伍的Member对象信息。
package Exer.exer18;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class FilterTest {
   
    @Test
    public void test01() {
        List<String> one = new ArrayList<>();
        one.add("清风");
        one.add("陈玄风");
        one.add("梅超风");
        one.add("陆乘风");
        one.add("曲灵风");
        one.add("武眠风");
        one.add("冯默风");
        one.add("罗玉风");

        List<String> two = new ArrayList<>();
        two.add("宋远桥");
        two.add("俞莲舟");
        two.add("俞岱岩");
        two.add("张松溪");
        two.add("张翠山");
        two.add("殷梨亭");
        two.add("张声谷");
//1. 第一个队伍只要名字为3个字的成员姓名;
//      2. 第一个队伍筛选之后只要前4个人;
        Stream<String> stream1 = one.stream().filter(s -> s.length() == 3).limit(4);

        // 3. 第二个队伍只要姓张的成员姓名;
        // 4. 第二个队伍筛选之后不要前1个人;
        Stream<String> stream2 = two.stream().filter(s -> s.startsWith("张")).skip(1);

        //5. 将两个队伍合并为一个队伍;
        //6. 根据姓名创建Member对象;Member类型包含name属性
        //7. 打印整个队伍的Member对象信息。
        Stream.concat(stream1, stream2).map(Member::new).forEach(System.out::println);

    }

}

class Member {
    private String name;

    @Override
    public String toString() {
        return "Member{" +
                "name='" + name + '\'' +
                '}';
    }

    public Member(String name) {
        this.name = name;
    }

    public Member() {
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值