Map adiconar para uma List

8 respostas
M

Eae Pessoal!!

Seguinte estou precisando das seguinte dica.

tem um Map<String, Integer> e estou tentando passar o dados deles para dentro do meu List.
Quando eu adiciono os dados na minha lista só consigo ler as referencias não as String e quando passo está lista para dentro do meu TableModel ele não consegue ler.

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ContaTipos {
	public  List<Qtd> contaTipo(){
		Qtd qtd = new Qtd();		
		String tipoQueQuero = "NotaFiscal";
		File file = new File("C:\ArqDivir\");
	
		File[] files = file.listFiles();
		
		List<String> listaQtdTipo = new ArrayList<String>();
		Map<String, Integer> map = new TreeMap<String, Integer>();		
		List<Qtd> qtds = new ArrayList<Qtd>();	
		try{
									
			for (File file2 : files) {
				
				String sufix[] = file2.getName().split("\.");
				
				//listaQtdTipo.add(sufix[2]);
				if(sufix[2].equals(tipoQueQuero)){
					listaQtdTipo.add(sufix[3]);
				}	
			}			  
			  
			for (String nome : listaQtdTipo) {  
				
			    Integer count = map.get(nome);  
			    if (count == null)  
			       count = 0;  
			    map.put(nome, count+1);		    
			    
			}
						
			for (Map.Entry<String, Integer> entry : map.entrySet()) {  
				
				System.out.println("teste dentro do ContaTipos = "+"Nome: " + entry.getKey() + "  Cont: " + entry.getValue());
				 
			    qtd.setCnpj((String)entry.getKey());
			    qtd.setQtd((String)entry.getValue().toString());
			    
			    qtds.add(qtd);
			}  									
						
			
		}catch (Exception e) {
			// TODO: handle exception
		}
		
		return qtds;
		
	}
	
}

como posso passar os dados para dentro desta List e receber os valores dela?

Obrigado

8 Respostas

nel

Oi!

Não entendi sobre ler as referências, mas vamos melhorar algo aqui:

for (String key : map.entrySet()) {    
                  
                System.out.println("teste dentro do ContaTipos = "+"Nome: " + key + "  Cont: " + map.get(key));  
                   
                qtd.setCnpj(key);  
                qtd.setQtd(String.valueOf(map.get(key));  
                  
                qtds.add(qtd);  
            }

Afinal, se é uma String porque dar (String) ? O mesmo vale que você dá um toString() e (String), é algo como String to String...
Altere o código como eu disse e faça isso:

for(Qtd obj : qtds) {
   System.out.println("CNPJ: " + obj.getCnpj());
   System.out.println("Qtd: " + obj.getQtd());
}

Se não estiver imprimindo os valores corretamente, ai posta o que está sendo impresso, caso contrário, o problema está na forma em que preenche sua JTable.
Abraços.

M

nel obrigado pela resposta.

Havia tentado deste jeito mais continua não me retornando

package com.tsystems.conta;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ContaTipos {
	public  List<Qtd> contaTipo(){
		Qtd qtd = new Qtd();		
		String tipoQueQuero = "NotaFiscal";
		File file = new File("C:\ArqDivir\");
	
		File[] files = file.listFiles();
		
		List<String> listaQtdTipo = new ArrayList<String>();
		Map<String, Integer> map = new TreeMap<String, Integer>();		
		List<Qtd> qtds = new ArrayList<Qtd>();	
		try{
									
			for (File file2 : files) {
				
				String sufix[] = file2.getName().split("\.");

				if(sufix[2].equals(tipoQueQuero)){
					listaQtdTipo.add(sufix[3]);
				}	
			}			  
			  
			for (String nome : listaQtdTipo) {  
				
			    Integer count = map.get(nome);  
			    if (count == null)  
			       count = 0;  
			    map.put(nome, count+1);		    
			    
			}
									
			for(String nome : map.keySet()) {  
				
				System.out.printf("O CNPJ %s se repetiu %s vezes.", nome, map.get(nome));
			
				qtd.setCnpj(nome);
				qtd.setQtd(String.valueOf(map.get(nome)));
				
				qtds.add(qtd);
			    
			}
	
			
		}catch (Exception e) {
			// TODO: handle exception
		}
		
		return qtds;
		
	}
	
}

aqui eu passo o List para meu view onde da erro

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.text.DateFormatter;


/**
 * Faremos essa classe implementar TableModelListener para visualizar os eventos
 * que ocorrem.
 */
public class ViewConta extends JFrame implements TableModelListener {

	private static final long serialVersionUID = 1L;
	private TipoTableModel modelo;
	private Conta conta;
	private ContaTipos ct;
	private JTable tabela;
	private JScrollPane scrollPane;
	private JButton botaoAdicionar;
	private JButton botaoRemover;
	private JButton botaoLimpar;
	private JLabel  lCampo1;
	private JFormattedTextField campo1;
	//private JTextField campo1;
	private JLabel  lCampo2;
	private JFormattedTextField campo2;
	private JComboBox combo;	
	//private JTextField campo2; 

	public ViewConta() {
		instanciaComponentes();
		adicionaComponentes();
		ajustaJanela();
	}

	
	
	private void instanciaComponentes() {
		conta = new Conta();		
		modelo = new TipoTableModel();
		// aqui está a grande jogada!		
		modelo.addTableModelListener(this);
		// ONDE IRÁ PASSAR OS DADOS PARA CONSULTA NO SELECT
		//modelo.adicionaLista(TestaConexao.getLista("01/01/2009","31/12/2009","RCV"));
		//modelo.adicionaLista(ClienteDAO.listarClientes());
		// mudamos o modelo de nossa tabela
		
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		DateFormatter df = new DateFormatter(format);
		
		tabela = new JTable();
		//tabela.setModel(modelo);
		scrollPane = new JScrollPane();
		scrollPane.setViewportView(tabela);
		
		lCampo1 = new JLabel();
		lCampo1.setText("Data Inicial:");		
		campo1 = new JFormattedTextField(df);
		campo1.setValue(new Date());
		//campo1 = new JTextField(10);
		//campo1.getText();
		
		lCampo2 = new JLabel();
		lCampo2.setText("Data Final:");
		campo2 = new JFormattedTextField(df);
		campo2.setValue(new Date());
		//campo2 = new JTextField(10);
		//campo2.getText();
		
		combo = new JComboBox();
		
		for (String tipo : conta.getLista()) {
			
			combo.addItem(tipo);
			
		}
		
		//combo.addItem("RCV");
		//combo.addItem("SND");
		
		botaoAdicionar = new JButton();
		botaoAdicionar.setText("Buscar");
		botaoAdicionar.addActionListener(new ActionListener() {



// aqui está o botão onde eu chamo o meu List<Qtd>, onde da o erro			



			public void actionPerformed(ActionEvent e) {
				//nesse caso, simplesmente adiciona um novo cliente aleatório
				List<Qtd> array = ct.contaTipo();							
				if (array.size()!= 0){					
					modelo.adicionaLista(array);					
				}else{
					JOptionPane.showMessageDialog(null, "Não há resultados");														
				}
							
					
			}
		});


// fim da chamada do List<Qtd>

		
		botaoRemover = new JButton();
		botaoRemover.setText("Remover");
		botaoRemover.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// remove o cliente selecionado
			/*	int indice = tabela.getSelectedRow();
				if (indice != -1) {
					modelo.remove(indice);
				}*/
			}
		});
		botaoLimpar = new JButton();
		botaoLimpar.setText("Limpar");
		/*botaoLimpar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				modelo.limpaLista();
			}
		});*/
	}

	private void adicionaComponentes() {
		add(scrollPane);
		JPanel panel = new JPanel();		
		panel.add(lCampo1);		
		panel.add(campo1);
		panel.add(lCampo2);
		panel.add(campo2);
		panel.add(combo);
		panel.add(botaoAdicionar);
		//panel.add(botaoRemover);
		panel.add(botaoLimpar);		
		add(panel, BorderLayout.SOUTH);
	}

	private void ajustaJanela() {
		setTitle("Clientes");
		pack();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	
	 

	@Override
	public void tableChanged(TableModelEvent e) {
		// quando a estrutura de dados muda, imprimimos a informação. Fazer a
		// persistência no banco seria o comportamento realista desse método.
		String tipo;
		switch (e.getType()) {
		case TableModelEvent.DELETE:
			tipo = "DELETE";
			break;
		case TableModelEvent.INSERT:
			tipo = "INSERT";
			break;
		case TableModelEvent.UPDATE:
			tipo = "UPDATE";
			break;
		default:
			tipo = "?";
			break;
		}
		// mostra uma mensagem:
		// TIPO_DE_EVENTO: linhaInicial-linhaFinal, coluna
		// -1 representa todas as linhas ou todas as colunas
		// [telefone removido] representa possível mudança em toda a tabela
		System.out.printf("%s: %d-%d, %d%n", tipo, e.getFirstRow(), e
				.getLastRow(), e.getColumn());
	}

}

acho que está ai o erro obrigado

nel

Oi!

Uma coisa, sempre que ocorrer erro poste o stacktrace completo, muito mais fácil de ajuda-lo.
Duas coisas:

1 - A sua Lista está sendo preenchida corretamente? Por isso eu disse para dar o System.out.println() com os valores da lista, após preencher a mesma.
2 - Poste o erro.

Abraços.

M

com o System.out.println funciona normalmente

o retorno

CNPJ: 31096068001898
Qtd: 3

agora quando passo para o view da o erro

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at com.tsystems.conta.ViewConta$1.actionPerformed(ViewConta.java:105)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
nel

Oi!

Essa linha: at com.tsystems.conta.ViewConta$1.actionPerformed(ViewConta.java:105)

Indica onde está seu problema. Veja a classe ViewConta linha 105. Está fazendo algo assim:

null.algumaOperacao.

Tente averiguar isso.
Abraços.

A

Carinha, acho que o seu problema de NullPointerException é provocado pelo fato de ct não ser inicializado em nenhum lugar. Pelo menos não vi no código.

Tem que se tomar um cuidado disgramado com referências nulas no java. Você foi na fé no código:

É o que o nel disse:

Você tá chamando na maior fé:

List<Qtd> array = ct.contaTipo(); , mas ct é um campo private que não tou vendo ser inicializado no seu código…

Outra coisa, carinha. Tu sabe o que é “static”? Seu código contaTipo() tá com cara que é código estático, ou seja, é informação que não depende das dados específicos a uma instância para serem recuperados. Se esse é o caso, Você poderia declarar o método contaTipo() como

public static List<Qtd> contaTipo() { e chamar no seu código este método desta forma:

List<Qtd> array = ContaTipos.contaTipo();
M

mago_ice:
Eae Pessoal!!

Seguinte estou precisando das seguinte dica.

tem um Map<String, Integer> e estou tentando passar o dados deles para dentro do meu List.
Quando eu adiciono os dados na minha lista só consigo ler as referencias não as String e quando passo está lista para dentro do meu TableModel ele não consegue ler.

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ContaTipos {
	public  List<Qtd> contaTipo(){
		Qtd qtd = new Qtd();		
		String tipoQueQuero = "NotaFiscal";
		File file = new File("C:\ArqDivir\");
	
		File[] files = file.listFiles();
		
		List<String> listaQtdTipo = new ArrayList<String>();
		Map<String, Integer> map = new TreeMap<String, Integer>();		
		List<Qtd> qtds = new ArrayList<Qtd>();	
		try{
									
			for (File file2 : files) {
				
				String sufix[] = file2.getName().split("\.");
				
				//listaQtdTipo.add(sufix[2]);
				if(sufix[2].equals(tipoQueQuero)){
					listaQtdTipo.add(sufix[3]);
				}	
			}			  
			  
			for (String nome : listaQtdTipo) {  
				
			    Integer count = map.get(nome);  
			    if (count == null)  
			       count = 0;  
			    map.put(nome, count+1);		    
			    
			}
						
			for (Map.Entry<String, Integer> entry : map.entrySet()) {  
				
				System.out.println("teste dentro do ContaTipos = "+"Nome: " + entry.getKey() + "  Cont: " + entry.getValue());
				 
			    qtd.setCnpj((String)entry.getKey());
			    qtd.setQtd((String)entry.getValue().toString());
			    
			    qtds.add(qtd);
			}  									
						
			
		}catch (Exception e) {
			// TODO: handle exception
		}
		
		return qtds;
		
	}
	
}

como posso passar os dados para dentro desta List e receber os valores dela?

Obrigado

nel

Ué…simples

Como é uma classe publica e um método publico, basta fazer:

ContaTipos ct = new ContaTipos(); List<Qtd> result = ct.contaTipo();

Pronto, tens a sua lista populada (ou não, depende do seu arquivo de nota fiscal).
Abraços.

Criado 27 de julho de 2011
Ultima resposta 27 de jul. de 2011
Respostas 8
Participantes 3