Será que alguém pode me ajudar, estou com o seguinte problema. Tenho duas arraylists que preciso transformar em uma terceira para criar uma combo, porém não estou conseguindo, vou postar o meu código:
private List<Prestador> ListaCredorPrestadores = new ArrayList<Prestador>();
private List<Funcionario> ListaCredorFuncionarios = new ArrayList<Funcionario>();
DBConnection con = DBConnection.getInstance();
PrestadorDAO prestadordao = new PrestadorDAO(con.getCon());
FuncionarioDAO funcionariodao = new FuncionarioDAO (con.getCon());
ListaCredorPrestadores = prestadordao.getCredorPrestadores();
ListaCredorFuncionarios = funcionariodao.getCredorFuncionarios();
Assim carrego as duas, porém para jogar na combo faço assim:
ObjetoCombo objectoCombo;
ArrayList<ObjetoCombo> lstObjetoCombo = new ArrayList();
for (Prestador objGrupos : ListaPrestadores) {
objectoCombo = new ObjetoCombo();
objectoCombo.setId(objGrupos.getPrestadorId());
objectoCombo.setDescri(objGrupos.getPrestadorNome());
lstObjetoCombo.add(objectoCombo);
//System.out.println(objGrupos.getCodigoUnidade());
}
modeloCboBoxModel = new ResultSetComboBoxModel(lstObjetoCombo);
combo.setModel(modeloCboBoxModel);
combo.setSelectedIndex(-1);
Desta forma as combo funcionam, mas quando precisei juntar os dois arrays, não deu certo.
Voce pode implementar uma mesma interface para os dois, assim vc pode generalizar uma interface ao inves de uma determinada classe:
public class Prestador implements Credor...
public class Funcionario implements Credor...
List<Credor> credores = new ArrayList<Credor>;
credores.add(new Funcionario());
credores.add(new Prestador());
Bom, Mickdark vou tentar implementar do jeito que você colocou, mas antes, vou explicar melhor a situação.
É o seguinte, tenho duas tabelas no banco, uma de funcionários e outra de prestadores, em determinado momento, preciso dos dois em uma combobox.
Na tabela funcionários tenho: Id_funcionario e Nome_Funcionario, na tabela prestadores, tenho: id_prestador e nome_prestador, onde os campos com id são do tipo int e os campos nome são do tipo string, para diferenciar um do outro, atribuí mais uma string chamada de credor_funcionario e credor_prestador, isso para saber em qual tabela pegar os outros dados como endereço etc…
Resumindo, preciso juntar tudo isso em uma combo para que fique mais ou menos assim:
ID NOME CREDOR
21 JORGE FUNC
56 CARLO PRES
44 NUBIA PRES
01 JOÃO FUNC
Bom é isso, eu gostaria que a combo ficasse com esses três campos, porém ainda não consegui.
Olha amigo Mickdark, funcionou perfeitamente! Cara nem acredito que isso tá funcionando. O bom foi que aprendi coisas novas, sempre aprendo com essa comunidade.
A única mudança que tive que fazer foi colocar a interface como public para que fosse acessada por outra classe, no mais, foi só sucesso.
public interface Credor{
public Integer getId();
public String getNome();
public String getCredor();
}
Mickdark, olha só, se for abuso pode falar, é só um detalhe. Observei que os funcionários ficam depois dos prestadores, teria alguma forma de ordená-los?
[quote=infocontroller]Olha amigo Mickdark, funcionou perfeitamente! Cara nem acredito que isso tá funcionando. O bom foi que aprendi coisas novas, sempre aprendo com essa comunidade.
A única mudança que tive que fazer foi colocar a interface como public para que fosse acessada por outra classe, no mais, foi só sucesso.
public interface Credor{
public Integer getId();
public String getNome();
public String getCredor();
}
Mickdark, olha só, se for abuso pode falar, é só um detalhe. Observei que os funcionários ficam depois dos prestadores, teria alguma forma de ordená-los?
Como o Renli postou é só colocar um Collections.sort(credores), mas para isso vc precisa implementar a Interface Comparable ou a Interface Comparator, eu fiz um exemplo com Comparable para vc!!
interface Credor extends Comparable<Credor>{
public Integer getId();
public String getNome();
public String getCredor();
}
Classe Funcionario
class Funcionario implements Credor{
...
//Caso o outro objeto for "PRESTADOR", ele retorna que este objeto(Funcionario) é menor e coloca ele antes na lista
@Override
public int compareTo(Credor outroCredor) {
if(outroCredor.getCredor().equals("PRES")){
return -1;
}
return 0;
}
}
Classe Prestador
class Prestador implements Credor{
...
//Caso o outro objeto for "FUNCIONARIO", ele retorna que este objeto(Prestador) é maior e coloca ele depois na lista
@Override
public int compareTo(Credor outroCredor) {
if (outroCredor.getCredor().equals("FUNC")){
return 1;
}
return 0;
}
}
O retorno 0(Zero) significa que os objetos são iguais
Teste (Main)
public class Listas_ArrayList {
public static void main(String[] args) {
ArrayList<Credor> credores = new ArrayList<Credor>();
credores.add(new Prestador(3, "J SA", "PRES"));
credores.add(new Prestador(4, "J ME", "PRES"));
credores.add(new Funcionario(1, "Joao", "FUNC"));
credores.add(new Funcionario(2, "Jose", "FUNC"));
System.out.println("Antes de ordenar");
System.out.println("ID| NOME | CREDOR");
for (Credor credor : credores) {
System.out.println(credor.getId()+" | "+credor.getNome()+" | "+credor.getCredor());
}
Collections.sort(credores);
System.out.println();
System.out.println("Depois de ordenar");
System.out.println("ID| NOME | CREDOR");
for (Credor credor : credores) {
System.out.println(credor.getId()+" | "+credor.getNome()+" | "+credor.getCredor());
}
}
}
Obs*: Não sei se este he o melhor jeito de fazer, de qualquer forma caso queira implementar o Comparator segue dois links tutoriais: