【问题标题】:Java Collection search for Max AgeJava 集合搜索 Max Age
【发布时间】:2016-01-21 13:40:31
【问题描述】:

我需要从一个集合中获取最大年龄,该集合将他们的名字、名字和年龄存储在一个元素中。 示例:

collection[size++] = new Person(fname,lname,age);

//ex: Person("Bob", "Jones", 50);

到目前为止我得到的代码是遍历集合,但我被困在如何获取元素的年龄部分。

public int maxAge() {
    int mAge = -1;
    for (int i = 0; i == collection.size(); i++) {
        if (collection[i] > mAge) {
            collection[i] = mAge;
        }
    }

    return mAge; 
}

getSize() 获取集合大小。

【问题讨论】:

  • 作为旁注,循环中的条件将使它永远不会循环。要回答您的问题,请调用方法collection[i].getAge() 或直接访问类成员变量collection[i].age
  • 它是什么类型的集合?
  • @elias 是一个数组,很明显。
  • 现在很清楚了,但是collection.size() 将不起作用。

标签: java collections iteration


【解决方案1】:

假设您在Person 上有一个带有getAge() 方法的Array,您可以试试这个:

public int maxAge() {
    int mAge = -1;
    for (int i = 0; i < collection.length; i++) {
        if (collection[i].getAge() > mAge) {
            mAge = collection[i].getAge();
        }
    }

    return mAge; 
}

【讨论】:

  • 你为什么需要假设?这是一个整数数组。
  • 不符合collection[size++] = new Person(fname,lname,age);
【解决方案2】:
public int maxAge() {
    int mAge = -1;
    for (int i = 0; i < collection.length; i++) {
        if (collection[i].getAge() > mAge) {
            mAge = collection[i].getAge();
        }
    }
    return mAge; 
}

【讨论】:

    【解决方案3】:

    这取决于集合内对象的类型,假设是 Person 的集合:

    公共 int maxAge() {

    int mAge = -1;
    for (Person person: collection) {
        if (person.getAge() > mAge) {
            mAge=person.getAge();
        }
    }
    
    return mAge; 
    

    }

    【讨论】:

      【解决方案4】:

      请注意您的代码。它将mage 分配给collection,即-1 将分配给collection,并且您返回的mage 的值将始终为-1。

       public int maxAge() {
          int mAge = -1;
          for (int i = 0; i < getSize(); i++) {
           if (collection[i].getAge() > mAge) {
              mAge = collection[i].getAge();
            }
        }
      
         return mAge; 
       }
      

      【讨论】:

        【解决方案5】:

        获取最大年龄的人元素:

        Person personWithMaxAge = Collections.max( collection, new Comparator<Person>() {
            @Override
            public int compare( Person first, Person second) {
                if ( first.getAge() > second.getAge() )
                    return 1;
                else if (first.getAge() < second.getAge() )
                    return -1;
                return 0;
            }
        });
        

        然后int maxAge = personWithMaxAge.getAge();

        【讨论】:

          【解决方案6】:

          如果您使用的是 Java8:

          Optional<Person> person = collection.stream().max(Comparator.comparing(Person::getAge));
          

          类型是可选的,因为集合可能为空。

          现在你可以这样使用它了:

          person.ifPresent(p -> {
              // place your code here
              // System.out.println(p.getAge());
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-09
            • 2016-02-12
            • 2012-07-30
            • 2011-06-09
            • 2013-01-16
            • 2018-05-08
            • 2015-08-14
            相关资源
            最近更新 更多