Verificar se o conjunto está presente e sua cardinalidade em um Arquivo.txt

16 respostas Resolvido
java
T

Bom dia, Pessoal!!
Não tenho muita experiência e preciso de ajuda para resolver esse problema que estou enfrentado:
faço todas as combinações possíveis com as strings contidas no meu banco de dados, conteúdo do banco: Arquivo.txt
1-ARROZ,FEIJÃO,LEITE,AÇÚCAR
2-FEIJÃO,CAFE,PÃO,QUEIJO
3-MANTEIGA,ARROZ,FEIJÃO,CAFE
4-CAFE,PÃO,LEITE,AÇÚCAR
5-ÓLEO,FRALDA,LEITE,CERVEJA
6-FRALDA,CERVEJA,MANTEIGA,QUEIJO
e recebo como retorno do método que realiza essas comparações um SortedSet, exemplo de comparações: [arroz, feijão],[arroz,leite],[arroz,açúcar]. Agora quero verificar quantas vezes os itens [arroz,açúcar] aparecem juntos no banco de dados.
Já tentei de várias formas mas não estou conseguindo exito.

public int countItens(SortedSet palavra) throws IOException {
String word = “” + palavra;
int count = 0;
DataBase(getFile(), getBr(), getEnd());
while (getBr().ready()) {
String line = getBr().readLine();
if (line.contains(word)) {
System.out.println(“exite”);
count = count+1;
}
}
return count;
}

public void countItens(SortedSet palavra) throws IOException {

String word = “” + palavra;

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

while (getBr().ready()) {

String line = getBr().readLine();

String[] itensTransaction = line.split(",");

for (Comparable it : palavra) {

if (line.contentEquals(""+ it)) {

System.out.println(exite+it);

}

}
}

Também usei split e várias outras maneiras, mas não conseguir alguém poderia me ajudar por favor? Grato!!

16 Respostas

darlan_machado

Acredito que você esteja fazendo confusão.

Entendo que o banco de dados é um arquivo .txt contendo as informações, certo?

Recebe o SortedSet de qual método? Onde?
Pois, pelo que está aqui

Você utiliza (ou deveria utilizar) este SortedSet para comparar, não?

T

Darlan, bom dia!!!

eu recebo as combinações através do método :
public SortedSet> gen(Map<Set, Integer> firstItem, int k), que retorna uma SortedSet> e passo esse set como parâmetro para o os métodos que fiz o print .

darlan_machado

Você está bem perdido.
Se tem o SortedSet, precisa, apenas, iterar sobre ele e validar se a combinação de palavras está lá.
Algo como

Iterator it = palavra.iterator();
while(it.hasNext()){
    //Faz a verificação aqui
}
T

Darlan,

Eu fiz isso! Funciona quando faço as comparações com apenas uma um item ex: [arroz] aí encontro, mas quando tento [arroz,açúcar] não encontrar a ocorrência.

darlan_machado

Como não funciona? Como fez?

T
public void countItens(SortedSet palavra) throws IOException {

int count=0;

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

while (getBr().ready()) {

String line = getBr().readLine();

String[] itensTransaction = line.split(",");

Iterator it = palavra.iterator();

while(it.hasNext()){

if(line.contains((String)it.next())){

count = count+1;

System.out.println(yes+count);

}
}
      
    }

}

Ele conta a quantidade do [arroz] do [açúcar] e só quero a do [arroz,açúcar] .

darlan_machado

Só quer [arroz,açúcar,] nesta ordem? Não pode ser [açúcar,arroz]?
Já iterou o SortedSet e imprimiu cada elemento nele, para ver se bate com o padrão que busca?

T

pode ser em qualquer ordem, mas quero que reconheça os dois elementos no momento de verificar se existe ou não em cada linha do arquivo. Sim já fiz a iteração mas quando uso o contains, ou indexOf ou equals, nenhum funciona, estou perdido!!

darlan_machado

Cara, foque no que precisa e deixe de lamúrias.
Itere novamente e coloque um System.out.println para cada elemento, depois, poste aqui o que foi impresso.

T

Conteúdo linha arquivo->ARROZ,FEIJÃO,LEITE,AÇUCAR| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->ARROZ,FEIJÃO,LEITE,AÇUCAR| Conteúdo SortedSet->AÇUCAR
Conteúdo linha arquivo->FEIJÃO,CAFE,PÃO,QUEIJO| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->FEIJÃO,CAFE,PÃO,QUEIJO| Conteúdo SortedSet->AÇUCAR
Conteúdo linha arquivo->MANTEIGA,ARROZ,FEIJÃO,CAFE| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->MANTEIGA,ARROZ,FEIJÃO,CAFE| Conteúdo SortedSet->AÇUCAR
Conteúdo linha arquivo->CAFE,PÃO,LEITE,AÇUCAR| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->CAFE,PÃO,LEITE,AÇUCAR| Conteúdo SortedSet->AÇUCAR
Conteúdo linha arquivo->ÓLEO,FRALDA,LEITE,CERVEJA| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->ÓLEO,FRALDA,LEITE,CERVEJA| Conteúdo SortedSet->AÇUCAR
Conteúdo linha arquivo->FRALDA,CERVEJA,MANTEIGA,QUEIJO| Conteúdo SortedSet->ARROZ
Conteúdo linha arquivo->FRALDA,CERVEJA,MANTEIGA,QUEIJO| Conteúdo SortedSet->AÇUCAR

T

Ou seja se ele verificar só o [arroz] a quantidade retornada é dois 2 e o [arroz,açúcar] a quantidade é 1. Mas a do [arroz,açucar] não consigo fazer

darlan_machado

Acho que não preciso nem comentar mais nada. Você tem, no SortedSet, menos elementos do que o esperado.

darlan_machado

Cara, isso é uma confusão sem fim.
Reveja todo o teu código, cada método e verifique o que você realmente precisa em cada um deles.
A ideia do Set (como o SortedSet) é não permitir elementos duplicados.

T
Solucao aceita

Oks!! De qualquer forma obrigado!!

M

Olá… vi que você tentou bastante, então, olha só, tenta isso:

class CountItemsList<E> extends ArrayList<E> { 

   
    private Map<E,Integer> count = new HashMap<E,Integer>();

    public boolean add( E element  ) { 
        if( !count.containsKey( element ) ){
            count.put( element, 1 );
        } else { 
            count.put( element, count.get( element ) + 1 );
        }
        return super.add( element );
    }


    public int getCount( E element ) { 
        if( ! count.containsKey( element ) ) {
            return 0;
        }
        return count.get( element );
    }

depois:

List<String> produtos = new CountItemsList<String>();
        produtos.add("PRODUTO 1");
        produtos.add("PRODUTO 2");
        produtos.add("PRODUTO 3");
        produtos.add("PRODUTO 4");
        produtos.add("PRODUTO 1");
        produtos.add("PRODUTO 1");

e faça um teste ->

System.out.println("Encontrado "+((CountItemsList<String> produtos).getCount("PRODUTO 1")+ " vezes.");

o output será ->

Encontrado 3 vezes.

dai pra frente pra adequar o que você precisa, não vai ser tão difícil não !

T

Obrigado, vou tentar aqui!

Criado 30 de janeiro de 2018
Ultima resposta 30 de jan. de 2018
Respostas 16
Participantes 3