【问题标题】:Searching an ArrayList by multiple object attribute通过多个对象属性搜索 ArrayList
【发布时间】:2015-05-01 08:21:24
【问题描述】:

我有一个类 Person 带有名字和姓氏,还有一个类 Student 带有平均成绩和期末成绩,它们继承了 Person。

public class Student extends Person
{
    private double HomeworkAve;
    private double QuizAve;
    private double ProjectAve;
    private double TestAve;
    private double FinalGrade;
    private String LetterGrade;

    public Student(){}

    public Student(String FName, String LName, double HomeworkAve, double QuizAve, double ProjectAve, double TestAve) {

        super(FName, LName);

        this.HomeworkAve = HomeworkAve;
        this.QuizAve = QuizAve;
        this.ProjectAve = ProjectAve;
        this.TestAve = TestAve;
    }



    public void setHomeworkAve(double HomeworkAve) {
        this.HomeworkAve = HomeworkAve;
    }

    public void setQuizAve(double QuizAve) {
        this.QuizAve = QuizAve;
    }

    public void setProjectAve(double ProjectAve) {
        this.ProjectAve = ProjectAve;
    }

    public void setTestAve(double TestAve) {
        this.TestAve = TestAve;
    }

我希望能够按姓名搜索学生,所以在我的主课中,我使用了这个:

for (int i = 0; i < aloStudent.size(); i++) {
    String xsFirstName = aloStudent.get(i).getFName();

    if (xsFirstName.equals(xsFName) == true) 
    {
        System.out.println("found");
    }
}

在调试时,我注意到xsFirstName 具有正确的值,但是当它与xsFName(这是用户的输入)进行比较时,它会跳过println。我做错了什么?

【问题讨论】:

  • 仅从上面的代码很难判断。要检查的一件事是“用户的输入”(我假设是 xsFName)不包含前导或尾随空格。这会使比较失败。尝试将 trim() 应用于输入。另外,上面的“==true”也不是必须的。
  • 你为什么要这样做.equals(xsFName) == true???? .equals() 本身将为您提供 if 条件的真或假。另外,您是否使用if(xsFirstName.intern().equals(xsFName)){......}...进行检查?另外,在您的调试中,您是否发现用户输入的值是什么?鉴于您的代码 sn-p,除非您可以报告用户输入不同,否则很难判断发生了什么。您似乎正确使用了.equals()....检查用户输入xsFName
  • 如果您不想要区分大小写的比较,您可以使用 String.equalsIgnoreCase() 方法或将两个字符串转换为大写/小写,然后使用 String.equals()。
  • 添加修剪不起作用,我拿出了比较。是的,我看到了变量中保存的值,并且没有多余的空格,并且它们都保存了相同的字符串。
  • 您不能提供示例输入和示例aloStudent 内容,因为......?如果没有它,我们应该如何重现您的问题?

标签: java arraylist


【解决方案1】:

您应该考虑使用较短的版本

if (aloStudent.stream().anyMatch(s -> s.getFName().equals(xsFName))) {
    System.println("found");
}

【讨论】:

  • 这个答案假定 Java 8。
猜你喜欢
  • 2021-05-26
  • 2017-07-17
  • 2018-01-16
  • 2017-04-22
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多