获取ArrayList中具有最高值的特定元素

时间:2016-04-03 04:53:23

标签: java arraylist get highest

我是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 个答案:

答案 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)

Java 8很酷!

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());

您现在拥有从名称到最大年龄的地图。