这是方法:
Public static <E> int numberMaximus (Collection <E> collection, Comparator <? Super E> comparator)
它接收一个集合和一个比较器,并且必须返回集合中具有最大值的任何值。根据比较器的顺序。如果比较器 null ,则假定集合的元素实现了Comparable接口。
以下是尝试该方法的示例,下一个调用应返回 2 (最大值为3,即两次): NumberMaximus(Arrays.asList(1,2,3,1,3,1,2,2),null)
我认为代码应该像......
public static <E> int numberMaximus(Collection<E> collection, Comparator<? super E> comparator){
int cont = 0;
int max = 0;
Iterator it = collection.iterator();
if(comparator == null){ //Comparator is null
while(it.hasNext()){
if(it.next() > max){
max = it.next();
//Here something to know the number of values...
}
}
}else{ //Comparator not null
while(it.hasNext()){
if(it.next().equals(comparator)){
cont++;
}
}
}
return cont;
}
&#13;
答案 0 :(得分:0)
这是我能够提出的:
public static <E> int numberMaximus(Collection<E> coleccion, Comparator<? super E> comparador){
E maximo;
Comparator<? super E> comp = comparador;
if (comp == null) {
comp = (o1, o2) -> ((Comparable<E>)o1).compareTo(o2);
}
maximo = coleccion.stream().max(comp).orElse(null);
if (maximo == null) {
return 0;
}
return (int)coleccion.stream().filter(x -> x == maximo).count();
}
首先,它决定使用什么比较器。如果参数不为null,请使用该参数。如果为null,请使用(o1, o2) -> ((Comparable<E>)o1).compareTo(o2)
,因为您说它将其视为实现Comparable<E>
。
使用流API的max
方法找出最大值。如果没有最大值,则返回0.如果有,请删除所有不是maximo
的内容并计算剩余数量。