如何查看对象列表以找到匹配项?
How to look though a list of Objects to find a match?
我正在尝试比较一堆相同 class 的对象以搜索匹配的 ID?
这是 GroupClass,当输入新条目时,它将根据 idNumber 进行测试以查看是否存在匹配项。
Public GroupClass {
private int idNumber;
private String name;
private double income;
public GroupClass(int id, String name, double income){
this.idNumber = id;
this.name = name;
this.income = income;
}
public int getIdNumber() {
return idNumber;
}
public void setIdNumber(int idNumber) {
this.idNumber = idNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
}
这是主要方法
import static java.lang.reflect.Array.set;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class ListTester {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Set<GroupClass> groupArray = new LinkedHashSet<>();
System.out.println("Enter a ID Number");
int id = input.nextInt();
System.out.println("Enter a First Name");
String name = input.next();
System.out.println("Enter a an Income");
double income = input.nextDouble();
groupArray.add(new GroupClass(1111, "Billy", 178000));
groupArray.add(new GroupClass(1112, "Sam", 78000));
groupArray.add(new GroupClass(1113, "Mark", 79000));
groupArray.add(new GroupClass(id, name, income));
printTheClass(groupArray);
}
public static void printTheClass(Set group){
for(Object theArray: group){
System.out.println(theArray + " ");
}
}
}
我见过几个类似的问题,但无法让它适用于我的特殊情况,在此先感谢。
根据上面的评论,您覆盖了 equals
方法,但这可能不适合 class.
的长期增长
但使用您现有的代码试试
public static void printTheClass(Set<GroupClass> group){
for(GroupClass theArray: group){
System.out.println(theArray + " ");
}
}
和
public static GroupClass findTheClass(Set<GroupClass> group, int id){
for(GroupClass obj: group){
if(obj.getIdNumber == id) return obj;
}
return null;
}
这可以用作
if (findTheClass (groupArray, id) == null) {
groupArray.add (new GroupClass(id, name, income));
}
不太确定您的目标是什么。如果你想在 id 已经存在的情况下拒绝任何新条目,你需要覆盖 GroupClass
的 hashCode
和 equals
方法,以便 LinkedHashSet
知道两个 GroupClass
对象不同:
@Override
public int hashCode() {
return this.idNumber;
}
@Override
public boolean equals(Object obj) {
return obj instanceof GroupClass && ((GroupClass) obj).getIdNumber() == this.idNumber;
}
但是,在大多数情况下,您可能希望使用条目的 ID 号来检索条目。那么最好使用一个以 id 作为键的映射,并将 GroupoClass 对象本身作为值
Map<Integer, GroupClass> groupmap = new HashMap<>()
groupmap.put(id, new GroupClass(id, name, income));
您将不得不使用 groupmap.keySet()
迭代地图。
我正在尝试比较一堆相同 class 的对象以搜索匹配的 ID? 这是 GroupClass,当输入新条目时,它将根据 idNumber 进行测试以查看是否存在匹配项。
Public GroupClass {
private int idNumber;
private String name;
private double income;
public GroupClass(int id, String name, double income){
this.idNumber = id;
this.name = name;
this.income = income;
}
public int getIdNumber() {
return idNumber;
}
public void setIdNumber(int idNumber) {
this.idNumber = idNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
}
这是主要方法
import static java.lang.reflect.Array.set;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class ListTester {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Set<GroupClass> groupArray = new LinkedHashSet<>();
System.out.println("Enter a ID Number");
int id = input.nextInt();
System.out.println("Enter a First Name");
String name = input.next();
System.out.println("Enter a an Income");
double income = input.nextDouble();
groupArray.add(new GroupClass(1111, "Billy", 178000));
groupArray.add(new GroupClass(1112, "Sam", 78000));
groupArray.add(new GroupClass(1113, "Mark", 79000));
groupArray.add(new GroupClass(id, name, income));
printTheClass(groupArray);
}
public static void printTheClass(Set group){
for(Object theArray: group){
System.out.println(theArray + " ");
}
}
}
我见过几个类似的问题,但无法让它适用于我的特殊情况,在此先感谢。
根据上面的评论,您覆盖了 equals
方法,但这可能不适合 class.
但使用您现有的代码试试
public static void printTheClass(Set<GroupClass> group){
for(GroupClass theArray: group){
System.out.println(theArray + " ");
}
}
和
public static GroupClass findTheClass(Set<GroupClass> group, int id){
for(GroupClass obj: group){
if(obj.getIdNumber == id) return obj;
}
return null;
}
这可以用作
if (findTheClass (groupArray, id) == null) {
groupArray.add (new GroupClass(id, name, income));
}
不太确定您的目标是什么。如果你想在 id 已经存在的情况下拒绝任何新条目,你需要覆盖 GroupClass
的 hashCode
和 equals
方法,以便 LinkedHashSet
知道两个 GroupClass
对象不同:
@Override
public int hashCode() {
return this.idNumber;
}
@Override
public boolean equals(Object obj) {
return obj instanceof GroupClass && ((GroupClass) obj).getIdNumber() == this.idNumber;
}
但是,在大多数情况下,您可能希望使用条目的 ID 号来检索条目。那么最好使用一个以 id 作为键的映射,并将 GroupoClass 对象本身作为值
Map<Integer, GroupClass> groupmap = new HashMap<>()
groupmap.put(id, new GroupClass(id, name, income));
您将不得不使用 groupmap.keySet()
迭代地图。