首页 > 解决方案 > 如何按列表中的属性搜索?爪哇

问题描述

我有一个程序,它正在从作为参数发送的文件中读取命令。例如,它读取一个名为的命令CreatePersonel U P001 Ali Poyraz 6并使用此信息创建一个工作人员。( U = UnQualified Personal, P001 = ID, Ali = Name, Poyraz = Surname, 6 = workhour) 创建此人员后,我将它们保存在列表中。当程序读取类似的命令ShowPersonnel P001时,如何找到具有该 ID 的元素?提前致谢。如果需要,这是我的代码:

司机等级:

import Employee.Employee;
import Employee.QualifiedEmployee;
import Employee.UnQualifiedEmployee;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class Driver {
    public static void main(String[] args) throws FileNotFoundException {
        long start = System.currentTimeMillis();
        int workhour;

        List<Employee> employees = new ArrayList<Employee>();

        Scanner scan = new Scanner(new File(args[0]));
        while (scan.hasNextLine()) {
            String data = scan.nextLine();
            String[] datas = data.split("\\s+");
            int y = 0;
            try {
                while(datas[y] != null){
                    String command = datas[y];

                    switch(command){
                        case "CreatePersonel":
                            if(datas[y+1].equals("U")){
                                Employee newEmployee = new UnQualifiedEmployee(datas[y+2],datas[y+3],datas[y+4],workhour = Integer.parseInt(datas[y+5]));
                                employees.add(newEmployee);
                                System.out.println("Personal Created. ID: "+newEmployee.getId());
                                break;
                            }
                            else{
                                Employee newEmployee = new QualifiedEmployee(datas[y+2],datas[y+3],datas[y+4],datas[y+5]);
                                employees.add(newEmployee);
                                System.out.println("Personal Created. ID: "+newEmployee.getId());
                                break;
                            }

                        case "ShowPersonel":
                            String searchVal = datas[y+1];
                            System.out.println("ShowPersonel");         //Will be written...
                            break;

                        case "CreateVehicle":
                            System.out.println("CreateVehicle");        //Will be written...
                            break;

                        case "ShowVehicle":
                            System.out.println("ShowVehicle");          //Will be written...
                            break;

                        case "AssignPersonel":
                            System.out.println("AssignPersonel");       //Will be written...
                            break;

                        case "MoveToStartPoint":
                            System.out.println("MoveToStartPoint");     //Will be written...
                            break;

                        case "TransferCargo":
                            System.out.println("TransferCargo");        //Will be written...
                            break;

                        case "CanTransferCargo":
                            System.out.println("CanTransferCargo");     //Will be written...
                            break;

                        case "UseFireArm":
                            System.out.println("UseFireArm");           //Will be written...
                            break;

                        case "CanUseFireArm":
                            System.out.println("CanUseFireArm");        //Will be written...
                            break; 

                        case "Transport":
                            System.out.println("Transport");            //Will be written...
                            break;

                        case "CanTransport":
                            System.out.println("CanTransport");         //Will be written...
                            break;

                        case "EmergencyAction":
                            System.out.println("EmergencyAction");      //Will be written...
                            break;

                        case "CanEmergencyAction":
                            System.out.println("CanEmergencyAction");   //Will be written...
                            break;
                    }

                    break;
                }
            }
            catch(Exception ignored) {
            }
        }

        long end = System.currentTimeMillis();
        float sec = (end - start) / 1000F;
        System.out.println("Program executed in "+sec+" seconds.");
    }
}

员工等级:

package Employee;

public class Employee {
    private String id;
    private String name;
    private String surname;

    public Employee(String id, String name, String surname) {
        this.id = id;
        this.name = name;
        this.surname = surname;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public void info(){
        System.out.println("Name: "+this.getName()+" Surname: "+this.getSurname()+" ID: "+this.getId()+" Type: Employee");
    }
}

UnQualifiedEmployee类:

package Employee;

public class UnQualifiedEmployee extends Employee{
    int workHour;

    public UnQualifiedEmployee(String id, String name, String surname, int workHour) {
        super(id, name, surname);
        this.workHour = workHour;
    }

    public int getWorkHour() {
        return workHour;
    }

    public void setWorkHour(int workHour) {
        this.workHour = workHour;
    }

    @Override
    public void info() {
        System.out.println("Name: "+this.getName()+" Surname: "+this.getSurname()+" ID: "+this.getId()+" Type: UnQualified Employee");
    }
}

QuaifiedEmployee类:

package Employee;

public class QualifiedEmployee extends Employee{
    private String lisanceNumber;

    public QualifiedEmployee(String id, String name, String surname, String lisanceNumber) {
        super(id, name, surname);
        this.lisanceNumber = lisanceNumber;
    }

    public String getLisanceNumber() {
        return lisanceNumber;
    }

    public void setLisanceNumber(String lisanceNumber) {
        this.lisanceNumber = lisanceNumber;
    }

    @Override
    public void info() {
        System.out.println("Name: "+this.getName()+" Surname: "+this.getSurname()+" ID: "+this.getId()+" Type: Qualified Employee");
    }
}

我不知道您在我的项目中是否需要其他课程,但如果您需要,请告诉我,我会分享。

标签: javalistoop

解决方案


正如我从您的问题中了解到的那样,您有一个包含对象的列表,例如 (U = UnQualified Personal, P001 = ID, Ali = Name, Poyraz = Surname, 6 = workhour),并且您得到一个元素 ShowPersonnel P001,其中 P001 是 id。您可以迭代您的列表并检查是否存在具有该 ID 的元素。

例如:

employees.stream().filter(employee -> employee.getId().equals("P001")).collect(toList())

然后,您将拥有一个包含具有该 id 的所有元素的列表,如果是唯一的,则包含一个仅包含一个元素的列表


推荐阅读