集合JAVA中的最大值总数

时间:2017-03-26 18:09:21

标签: java numbers

任何人都可以帮助我使用Java中的这些简单方法吗?我无法找到合适的解决方案。

这是方法: 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)

我认为代码应该像......

&#13;
&#13;
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;
&#13;
&#13;

1 个答案:

答案 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的内容并计算剩余数量。