Esse erro é um pouco cabeludo porque tem herança no meio. Não sei resolver assim de cor, vou fazer uns testes depois do almoço.
Re:Collections.sort
3 Respostas
Dica: em vez de implementar Comparable, muitas vezes é melhor usar um Comparator mesmo. Depende do seu gosto.
import java.util.*;
class VeiculoTO implements Comparable<VeiculoTO>{
public VeiculoTO (String pMarca) { marca = pMarca; }
private String marca;
public String getMarca() { return marca; }
public int compareTo (VeiculoTO v) {
return this.marca.compareTo (v.getMarca());
}
public String toString() { return "<marca = " + marca + ">"; }
}
// Note que "Comparable" não pode ser implementada duas vezes, com parâmetros diferentes!
// O codigo a seguir não compila.
/*
class VeiculoNovoTO extends VeiculoTO implements Comparable<VeiculoNovoTO>{
public VeiculoNovoTO (String pMarca, String pModelo) {
super (pMarca);
modelo = pModelo;
}
private String modelo; //
public String getModelo() { return modelo; }
public int compareTo (VeiculoNovoTO v) {
return this.modelo.compareTo (v.getModelo());
}
public String toString() { return "<marca = " + getMarca() + ", modelo = " + modelo + " >"; }
}
*/
// O código a seguir compila, mas isso irã requerer um Comparator.
class VeiculoNovoTO extends VeiculoTO {
public VeiculoNovoTO (String pMarca, String pModelo) {
super (pMarca);
modelo = pModelo;
}
private String modelo; //
public String getModelo() { return modelo; }
public String toString() { return "<marca = " + getMarca() + ", modelo = " + modelo + " >"; }
}
class ExemploCollectionsSort {
public static void main(String[] args) {
ArrayList<VeiculoTO> veiculos = new ArrayList<VeiculoTO>();
// Note que se algum dos elementos de Veiculos for VeiculoTO, não
// VeiculoNovoTO, não se pode usar a comparação por modelo.
// Só dá para fazer a comparação por marca.
veiculos.add (new VeiculoTO ("GM"));
veiculos.add (new VeiculoNovoTO ("Fiat", "Palio"));
Collections.sort (veiculos);
System.out.println (veiculos);
ArrayList<VeiculoNovoTO> veiculosNovos = new ArrayList<VeiculoNovoTO>();
veiculosNovos.add (new VeiculoNovoTO ("Fiat", "Idea"));
veiculosNovos.add (new VeiculoNovoTO ("GM", "Corsa"));
Collections.sort (veiculosNovos, new Comparator<VeiculoNovoTO> () {
public int compare (VeiculoNovoTO v1, VeiculoNovoTO v2) {
return v1.getModelo().compareTo (v2.getModelo());
}
});
System.out.println (veiculosNovos);
}
}
ola alguem pode me ajudar?
tenho uma classe veiculoTO onde a classe VeiculoNovoTO extends VeiculoTO implements Comparable
/**
* Compara dois veículos.
*
* @param objeto
* veículo a comparar
* @return resultado da comparação
* @see #getModelo()
*/
public int compareTo(VeiculoNovoTO veiculoNovoTO) {
return getModelo().compareTo(veiculoNovoTO.getModelo());
}
Na controller estou com esse erro na Collections
Bound mismatch: The generic method sort(List) of type Collections is not applicable for the
arguments (ArrayList). The inferred type VeiculoTO is not a valid substitute for the
bounded parameter <T extends Comparable<? super T>>
ArrayList veiculos = new ArrayList(this.veiculos .values());
Collections.sort(veiculos);
agradeço desde já
Valeu kra a ajuda…consegui resolver o problema…
Criei uma classe Comparador
public class Comparador{
/**
* Compara dois veiculos e o ordena em ordem Alfabetica
*
* @author Márcio André Ishida
* @param <T>
* @return (Comparator<T>) ALFABETICA_ORDER
* @since 1.1
*/
public static <T> Comparator<T> AlfabeticaComparator() {
return (Comparator<T>) ALFABETICA_ORDER;
}
private static final Comparator ALFABETICA_ORDER = new AlfabeticaComparator();
private static class AlfabeticaComparator<T>
implements Comparator<VeiculoNovoTO>{
public int compare(VeiculoNovoTO c1, VeiculoNovoTO c2) {
return c1.compareTo(c2);
}
}
}
e na classe controller coloquei assim
ArrayList<VeiculoTO> veiculos = new ArrayList<VeiculoTO>(this.veiculos
.values());
Collections.sort(veiculos,Comparador.AlfabeticaComparator());
Num sei se eh o certo mas ta funcionando
vlw a ajuda