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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top