1

我是 java 新手,遇到问题ArrayList。我想从 Jozef 和 Klaus 那里得到最高的价值。

ArrayList好像:

|  Name        | Age|
+--------------+----+
| Jozef Coin   | 55 |    
| Jozef Coin   | 56 |    
| Jozef Coin   | 57 |
| Klaus Neumer | 34 |
| Klaus Neumer | 31 |
| Klaus Neumer | 59 |

到目前为止,这是我的代码,它只返回arraylist.

Person b = persons.get(0)

for(Person p: persons){    
      if(p.getAge() >= b.getAge()){    
         b = p;    
           System.out.println(b.toString());    
      }    
}

我可能有点不知所措,但我很想知道这是否可行,如果可以,是否有解决方案。

4

4 回答 4

3

您可以将Comparable用于您的任务

public class CompareAge implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getAge().compareTo(p2.getAge());
    }
}

然后使用CompareAge该类,如下所示

Collections.sort(myArrayList, new CompareAge());
myArrayList.get(arrayList.size() - 1); //Retrieve the last object
于 2016-04-03T05:03:48.133 回答
0

Java 8 很酷!

    int[] a = {1,2,3,4};
    OptionalInt maxValue = IntStream.of(a).max();
    System.out.println("Max Value: " + maxValue);
于 2016-04-03T05:07:38.073 回答
0

您可以在 Java 8 中一步完成:

Map<String, Integer> oldestMap = persons.stream()
    .collect(Collectors.groupingBy(Person::getName,
        Collectors.maxBy(Person::getAge).get());

你现在有一张从名字到最大年龄的地图。

于 2016-04-03T05:57:56.820 回答
0

除非我们知道 Person 类中的方法,否则很难回答,但这将是我这样做的一般方式。

Person b = persons.get(0)
int jozefHighest = 0;
int klausHighest = 0;

for(Person p: persons){

      if(p.getName().startsWith("Jozef") {
        if(p.getAge() > jozefHighest)
            jozefHighest = p.getAge)_
      } else if (p.getName().startsWith("Klaus")) {
        if(p.getAge() > klausHighest)
            klausHighest = p.getAge()
      }

}
于 2016-04-03T05:02:39.097 回答