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

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!!

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?

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 .

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
}

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.

Como não funciona? Como fez?

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] .

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?

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!!

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.

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

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

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

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.

Oks!! De qualquer forma obrigado!!

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 !

Obrigado, vou tentar aqui!