Concatenar todos itens que tem mesmo id em apenas um linha e gravar em arquivo

8 respostas Resolvido
java
T

Boa tarde, Senhores!!

Alguém poderia me ajuda com essa dúvida, estou tentando concatenar todos itens que possuí o mesmo id em apenas um linha e gravar em arquivo:

Ex. esse é meu banco:

{2810783=CD COLGATE TRIPLA ACAO MENTA SUAVE 90G}

{2810783=CREMOGEMA MAIZENA TRAD 500G}

{2810783=MANTEIGA REGATAS C/SAL 200G}

{2810783=MILHO VERDE JUSSARA 200G}

{2810783=OLEO SOJA REF SOYA PET 900ML}

{2810783=SABON ALBANY HIDRAT SUAVIZANTE 90G}

{2810783=SABON ALBANY HIDRAT SUAVIZANTE 90G}

{2810783=SABON ALBANY HIDRATACAO INTENSIVA 90G}

{2810783=SABON ALBANY HIDRAT NUTRIT& PART ESF 90G}

Eu desejo gravar ele assim:

2810783 “CD COLGATE TRIPLA ACAO MENTA SUAVE 90G” “CREMOGEMA MAIZENA TRAD 500G” “MANTEIGA REGATAS C/SAL 200G” “MILHO VERDE JUSSARA 200G” “OLEO SOJA REF SOYA PET 900ML” “SABON ALBANY HIDRAT SUAVIZANTE 90G” “SABON ALBANY HIDRAT SUAVIZANTE 90G” “SABON ALBANY HIDRATACAO INTENSIVA 90G” “SABON ALBANY HIDRAT NUTRIT& PART ESF 90G”

Todos na mesma linha, estou tentando mas sem sucesso poderiam me ajudar por favor?
O que eu fiz até agora foi isso:

FileWriter arq = new FileWriter("/home/reuder/Documentos/bancodados.txt");

PrintWriter gravarArq = new PrintWriter(arq);

HashMap<String, String> map = new HashMap<>();

FileView fw = new FileView();

DataBase db = new DataBase();

String temp = “”;

db.DataBase(db.getFile(), db.getBr(), db.getEnd());

while (db.getBr().ready()) {

String line = db.getBr().readLine();

String[] token = line.split("[^0-9]");

String[] token1 = line.split(";");

map.put(token[1], token1[2]);

temp+=token1[2];

System.out.println(""+temp);

}

resultado:

“CD COLGATE TRIPLA ACAO MENTA SUAVE 90G”“CREMOGEMA MAIZENA TRAD 500G”“MANTEIGA REGATAS C/SAL 200G”“MILHO VERDE JUSSARA 200G”“OLEO SOJA REF SOYA PET 900ML”“SABON ALBANY HIDRAT SUAVIZANTE 90G”“SABON ALBANY HIDRAT SUAVIZANTE 90G”“SABON ALBANY HIDRATACAO INTENSIVA 90G”“SABON ALBANY HIDRAT NUTRIT& PART ESF 90G”“BISC PETYAN COCO 750GR”“BISC PETYAN COCO 750GR”“BISC PETYAN DOCE 750G”“CD CLOSE-UP TRIPLE MENTA AMERICANA 90G”“CREME DE LEITE ITALAC 200GR”“DESOD REXONA POWDER ROLL 50ML”“DESOD REXONA ROLL TEENS TROP ENERGY 50ML”“DETERG ATOL LAVA LOUCAS COCO 500ML”“ESP BETTANIN BRILHUS M USO 01UN”“ESP BETTANIN BRILHUS M USO 01UN”“AGUA SANIT Q BOA CLORO ATIVO 02L”“SABON ALMA DE FLORES TRAD 130G”"BANANA DA TERRA "…

Não estou conseguindo realizar o controle quando existes a necessidade de gerar uma nova transação. Ou seja quando o id muda.

espero que possam me ajudar, obrigado!!

8 Respostas

darlan_machado

O problema não está na hora de gravar, está na forma como você organiza os itens.
Você já pensou em usar Map?

Mike

Vamos desde o começo:
Cria um map, a chave será o id e o valor o nome
Na hora da inserção, você verifica se aquele id ja não esta no map, se tiver, você concatena, se não, apenas insere.

Na hora de gravar no arquivo, você grava a chave e o valor, e a cada iteração você quebra a linha

T

Sinceramente, nunca usei map! Mas vou tentar, para ver se dá certo!

T

Obrigado, vou tentar seguir sua lógica e vê se funciona, oks?

darlan_machado

Basicamente, um map funciona baseado em uma chave única que identifica um valor.

Map<String, String> mapa = new HashMap<String, String>();
mapa.put("123", "Danone");
mapa.put("456", "Omo");

No teu caso, como o @Mike sugeriu, você pode validar se existe valor para uma determinada chave:

String valor = mapa.get("123");
if(null != valor) {
    valor += " Batavo";
    mapa.put("123", valor);
}
T

Humm… Entendi, Obrigado!

darlan_machado
Solucao aceita

Apenas complementando e ajustando

String valor = mapa.get("123");
if(null == valor) {
    valor = "";
}
valor += " Batavo"; //Se houver algo em valor ficará "Algo Batavo", senão, só "Batavo"
mapa.put("123", valor);
T

Darlan,

Muito obrigado por compartilhar seu conhecimento, funcionou certinho!!

Valeu!!!

Criado 9 de abril de 2018
Ultima resposta 10 de abr. de 2018
Respostas 8
Participantes 3