Bom dia, estou com um problema, eu tenho uma lista em uma jTable com nomes e idades, eu quero pegar os nomes da lista, remover os nomes duplicados e passar apenas os nomes únicos para um JComboBox.
Nenhuma as opções que pesquisei e testei, funcionou…
private void btn_salveActionPerformed(java.awt.event.ActionEvent evt) {
//Pegando valores Do Usuario
String nome = field_enviar.getText();
int idade = 21;
Pessoa p = new Pessoa(nome, idade);
ComboPessoa c = new ComboPessoa(p.getNome());
model.addRow(p);
ArrayList<String> lista = new ArrayList<>();
for(int i = 0; i < model.getRowCount(); i++) {
lista.add(model.getValueAt(i, 0).toString());
}
Set<String> primes = new LinkedHashSet<String>(lista);
lista.clear();
lista.addAll(primes);
System.out.println("Lista: " + lista);
}
Pelo o que eu entendi você quer pegar uma List
dos nomes que você já tem e deixar apenas nomes distintos nesta lista correto? Qual versão do Java está utilizando?
Utilizando java 8+ é bem simples, você pode fazer:
List listNomesDistintos = listNomes.stream().distinct().collect(Collectors.toList());
Onde a List de Strings é transformada em Stream
é filtrada apenas para Strings distintas e retornada novamente como uma List
.
java 8, isso, quero pega a lista da tabela, filtrar eles e passar para um JcomboBox, até o filtro eu consegui, mas quando eu tento passar esses valores para o Jcombobox, ele vai até bem, até que se repete…
Mas o código que você postou é basicamente a tentativa de fazer uma Lista de String ficar com seu conteúdo distinto e não popular um ComboBox. Assumi que o erro era em deixar os valores distintos.
E qual o problema exatamente, a Lista está ou não está populada de forma distinta?
Como você está populando o ComboBox? Posta o código.
a minha ideia era a seguinte Daniel, eu tenho uma tabela, com vários nomes, e alguns nomes são repetidos, então eu queria pegar somente os nomes distintos dessa tabela, a passar ela para um Combox, e sempre que eu adicionar um nome nessa tabela, se ela for distinta ela vai para o combox, se ele não for distinto ele não irar pra combox.
Depois de varias tentativas, eu consegui fazer dessa forma
PessoaModal pModal;
ArrayList<String> list;
ComboBoxModel model;
ArrayList<String> nomes = new ArrayList<>();
public NewJFrame() {
initComponents();
pModal = new PessoaModal();
jTable.setModel(pModal);
}
//Pegando Array de Strings e removendo as duplicadas
public static <T> ArrayList <T> removeDuplicate (ArrayList<T> list) {
ArrayList<T> newList = new ArrayList<T>();
for(T element : list) {
if(!newList.contains(element)) {
newList.add(element);
}
}
return newList;
}
//Convetendo Arrays para Strings
public static String[] convert(ArrayList list) {
ArrayList<String> newList = removeDuplicate(list);
String[] array = newList.toArray(new String[newList.size()]);
return array;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//Adicionando Row
Pessoa p = new Pessoa();
p.setNome(jTextField.getText());
pModal.addRow(p);
//Pegando os nomes e passando para uma Array
nomes.add(p.getNome());
Object[] items = convert(nomes);
model = new DefaultComboBoxModel(items);
Combo.setModel(model);
}
Troca a definição deste método:
//Pegando Array de Strings e removendo as duplicadas
public static <T> ArrayList <T> removeDuplicate (ArrayList<T> list) {
ArrayList<T> newList = new ArrayList<T>();
for(T element : list) {
if(!newList.contains(element)) {
newList.add(element);
}
}
return newList;
}
Deixando ele assim:
public static List<String> removeDuplicate (List<String> list) {
return list.stream().distinct().collect(Collectors.toList());
}
1 curtida
perfeito, brigado daniels!!