我是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());
}
}
我可能已经超出了我的想法,但我很想知道这是否可能,如果有的话,我们可以解决这个问题。
答案 0 :(得分: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
答案 1 :(得分: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()
}
}
答案 2 :(得分:0)
section .text
GLOBAL _start
_start:
mov ecx, string
mov edx, length
call toUpper
call print
mov eax, 1
mov ebx, 0
int 80h
;String in ecx and length in edx?
;-------------------------
toUpper:
mov eax,ecx
cmp al,0x0 ;check it's not the null terminating character?
je done
cmp al,'a'
jb next_please
cmp al,'z'
ja next_please
sub cl,0x20
ret
next_please:
inc al
jmp toUpper
done: int 21h ; just leave toUpper (not working)
print:
mov ebx, 1
mov eax, 4
int 80h
ret
section .data
string db "h4ppy c0d1ng", 10
length equ $-string
答案 3 :(得分:0)
您可以在Java 8中单步执行此操作:
Map<String, Integer> oldestMap = persons.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.maxBy(Person::getAge).get());
您现在拥有从名称到最大年龄的地图。