实验四 集合与函数式编程实验

目录

一、实验目的

二、实验内容

初始化

Student类

DatabaseUtils类

StudentSrvice接口

StudentServiceImpl类

Test类

 结果


2023.6.25 编辑

增加了目录

一、实验目的

  1. 掌握集合的基本操作方法
  2. 掌握Lambda表达式的声明编写规范
  3. 掌握基于集合Stream的过滤/映射/聚合等操作
  4. 掌握基于函数式编程集合元素的移除方法

二、实验内容

 初始化

        理解实验的目的,不要浪费时间在初始化的代码,直接复制使用

    https://github.com/bwhyman/java-course/tree/master/java-experiments

        在com.experiment04.entity下,创建Student类,直接从github复制使用实验代码

 Student类

package com.experiment04.entity;
public class Student {
    public enum Sex {
        MALE, FEMALE
    }
    private int id;
    private Sex sex;
    private String name;
    private int year;
    public Student(int id, Sex sex, String name, int year) {
        this.id = id;
        this.sex = sex;
        this.name = name;
        this.year = year;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public Sex getSex() {
        return sex;
    }
    public void setSex(Sex sex) {
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
}

        在com.experiment04.resource下,创建DatabaseUtils类,直接从github复制使用实验代码,模拟添加若干对象(更改了部分信息)

DatabaseUtils类

package com.experiment04.resource;

import com.experiment04.entity.Student;

import java.util.ArrayList;
import java.util.List;

public class DatabaseUtils {
    private static final List<Student> STUDENTS = create();
    private static List<Student> create() {
        List<Student> students = new ArrayList<>();
        students.add(new Student(200901, Student.Sex.FEMALE, "从云", 2009));
        students.add(new Student(201002, Student.Sex.MALE, "从玉", 2010));
        students.add(new Student(201203, Student.Sex.MALE, "沈明", 2012));
        students.add(new Student(201204, Student.Sex.MALE, "苍何", 2012));
        students.add(new Student(200905, Student.Sex.FEMALE, "苍时", 2009));
        students.add(new Student(200306, Student.Sex.MALE, "刘青春", 2003));
        return students;
    }
    public static List<Student> getStudents() {
        return STUDENTS;
    }
}

        在com.experiment04.service下,创建StudentSrvice接口,直接从github复制使用实验代码

 StudentSrvice接口

package com.experiment04.service;

import com.experiment04.entity.Student;

import java.util.List;
import java.util.Map;

public interface StudentService {
    /**
     * 向集合添加一个学生,返回当前全部学生
     * @param student
     * @return
     */
    List<Student> addStudent(Student student);

    /**
     * 返回指定届的全部学生
     * @param year
     * @return
     */
    List<Student> listStudentsByYear(int year);

    /**
     * 返回指定届,指定性别的全部学生的姓名
     * @param year
     * @param sex
     * @return
     */
    List<String> listStudentsNames(int year, Student.Sex sex);

    /**
     * 将所有学生,以性别分组
     * @return
     */
    Map<Student.Sex, List<Student>> mapStudentsBySex();

    /**
     * 删除指定学号的学生,返回是否成功删除
     * @param id
     * @return
     */
    boolean removeStudent(int id);
}

      在com.experiment04.service.impl下,创建StudentService接口的实现类StudentServiceImpl,基于集合stream等操作,按接口方法注释需求实现

StudentServiceImpl类

package com.experiment04.service.impl;

import com.experiment04.entity.Student;
import com.experiment04.resource.DatabaseUtils;
import com.experiment04.service.StudentService;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StudentServiceImpl implements StudentService {
    /**
     * 向集合添加一个学生,返回当前全部学生
     *
     * @param student
     * @return
     */
    public List<Student> addStudent(Student student) {
        List<Student> list = DatabaseUtils.getStudents();
        list.add(student);
        return list;
    }
    /**
     * 返回指定届的全部学生
     *
     * @param year
     * @return
     */
    public List<Student> listStudentsByYear(int year) {
        List<Student> list = DatabaseUtils.getStudents();
                return list.stream()
                .filter(s->s.getYear()==year)
                .collect(Collectors.toList());
    }
    /**
     * 返回指定届,指定性别的全部学生的姓名
     *
     * @param year
     * @param sex
     * @return
     */
    public List<String> listStudentsNames(int year, Student.Sex sex) {
        List<Student> list = DatabaseUtils.getStudents();
        return list.stream()
                .filter(s->s.getYear()==year&&s.getSex().equals(sex))
                .map(Student::getName)
                .collect(Collectors.toList());
    }
    /**
     * 将所有学生,以性别分组
     *
     * @return
     */
    public Map<Student.Sex, List<Student>> mapStudentsBySex() {
        Map<Student.Sex, List<Student>> map = new HashMap<>();
        List<Student> male_list = new ArrayList<>();
        List<Student> female_list = new ArrayList<>();
        map.put(Student.Sex.MALE, male_list);
        map.put(Student.Sex.FEMALE, female_list);
        List<Student> list = DatabaseUtils.getStudents();
        for (Student stu : list) {
            if (stu.getSex().equals(Student.Sex.MALE)) {
                map.get(Student.Sex.MALE).add(stu);
            }
            if (stu.getSex().equals(Student.Sex.FEMALE)) {
                map.get(Student.Sex.FEMALE).add(stu);
            }
        }
        return map;
    }
    /**
     * 删除指定学号的学生,返回是否成功删除
     *
     * @param id
     * @return
     */
    public boolean removeStudent(int id) {
        List<Student> list=DatabaseUtils.getStudents();
        for(Student stu:list){
            if(stu.getId()==id){
                list.remove(stu);
                return true;
            }
        }
        return false;
    }
}

        在com.experiment04下,创建Test类。为每个接口方法创建静态测试方法,在main()主函数调用

Test类

package com.experiment04;

import com.experiment04.entity.Student;
import com.experiment04.resource.DatabaseUtils;
import com.experiment04.service.impl.StudentServiceImpl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        Test t=new Test();
        t.getStudent();
        StudentServiceImpl test=new StudentServiceImpl();
        //1、添加三个学生
        test.addStudent(new Student(2011256218,Student.Sex.MALE,"胡越",2011));
        test.addStudent(new Student(2009277265,Student.Sex.FEMALE,"李清清",2009));
        test.addStudent(new Student(2010211231,Student.Sex.FEMALE,"宋筝",2010));
        System.out.println("添加后:");
        t.getStudent();
        //2、返回2009年的学生
        List<Student> year_list=test.listStudentsByYear(2009);
        System.out.println("2009年的学生:");
        for(Student stu:year_list){
            System.out.println(stu.getName());
        }
        //3、返回指定届,指定性别的全部学生的姓名
        List<String> name_list=test.listStudentsNames(2011,Student.Sex.MALE);
        System.out.println("2011年 性别为MALE的学生:");
        for(String name:name_list){
            System.out.println(name);
        }
        //4、学生以性别分组
        System.out.println("分组后:");
        Map<Student.Sex,List<Student>> map=new HashMap<>();
        map=test.mapStudentsBySex();
        for(Student.Sex key:map.keySet()){
            System.out.println("性别"+key+":");
            List<Student> list=map.get(key);
            for(Student student:list)
                System.out.println(student.getName());
        }

        //5、删除指定学号学生
        test.removeStudent(200306);
        System.out.println("删除后:");
        t.getStudent();
    }
    public void getStudent(){
        List<Student> list= DatabaseUtils.getStudents();
        for(Student stu:list){
            System.out.println(stu.getId()+" "+stu.getSex()+" "+stu.getYear()+" "+stu.getName());
        }
    }
}

 结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烟芜~镜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值