função Collections.max para iterable em java
-
22-07-2019 - |
Pergunta
O Java Collections.max leva apenas uma coleção de um objeto classificáveis. Entretanto, desde que a coleção não é necessariamente classificadas, não vejo qualquer razão para não implementar a mesma função máximo para tipos iteráveis.
Existe um método max para Iterable<T extends Comparable<? super T>>
na biblioteca padrão do java?
Solução
Collections.max
foi introduzido em 1.2. Iterable
foi introduzido em 1.5.
É raro ter um Iterable
que não é um Collection
. Se você fizer isso, então é simples de implementar (ter o cuidado de ler a especificação). Se você acha que é realmente importante que você pode apresentar um RFE em bugs.sun.com (ou votar se já existe um lá).
Outras dicas
Enquanto goiaba não é biblioteca padrão do Java, é perto o suficiente ...
E com.google.common.collect.Ordering#max(Iterable<E> iterable)
por exemplo. T max = Ordering.natural().max(myIterable);
Quanto ao porquê da biblioteca padrão não implementá-lo, pode ser porque uma coleção deve ser finito , mas uma necessidade Iterable não ser -e, sem dúvida, deve-se não aceitar uma Iterable se um não -terminating Iterable faria com que seu código para fazer um loop para sempre.
Hmm ... não, não é. Se você quiser usar Collections.max () você tem que converter o Iterable em uma Coleção primeiro, provavelmente, adicionando todos os elementos em uma Lista (ou Set , dependendo dos dados).
Por definição os elementos da coleção deve ser "classificáveis" (especificamente, eles devem implementos Comparable
) desde a fim de calcular o máximo, deve ser possível descobrir se um elemento é maior do que o outro (que é exatamente o que meios comparáveis).
O max () método na classe Collections tem essencialmente a assinatura de tipo exato que você postou lá, por isso deve se adequar ao seu propósito.