java - 如何按列表中的属性搜索?爪哇
问题描述
我有一个程序,它正在从作为参数发送的文件中读取命令。例如,它读取一个名为的命令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");
}
}
我不知道您在我的项目中是否需要其他课程,但如果您需要,请告诉我,我会分享。
解决方案
正如我从您的问题中了解到的那样,您有一个包含对象的列表,例如 (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 的所有元素的列表,如果是唯一的,则包含一个仅包含一个元素的列表
推荐阅读
- javascript - 如何使用 vis.js 强制边缘方向?
- windows - 无法删除程序文件以创建符号链接...说我需要自己的许可?
- c - scanf递归函数触发printf两次?
- android - 在 Kotlin 中记录变量的类型
- python - 如何在 python 中复制文件中的一行?
- java - bazel run *_deploy.jar 因“无法执行二进制文件”而失败
- google-sheets - 如何将单元格组合成两列以显示同一行中元素之间的所有链接
- tarantool - 在哪里可以找到用于对其执行远程调用的 vshard 副本集对象
- origen-sdk - 有没有办法将 if_enable 配置为始终有条件地通过或删除变量检查?
- xml - xml读取文件并写入xml文件