Busca em campo String = "100,101,200,201,300" e array por filial, buscar primeira sentença X00

5 respostas
soloplayer

Olá amigos, boa tarde, gostaria de tirar uma dúvida com vocês qual seria a melhor forma para buscar por exemplo:

String modelo = "100,101,200,201,300";

ArrayList<String> modeloList = new ArrayList();
    modeloList.add("100,101,200,201,300");
    modeloList.add("100,300");
    modeloList.add("201,300");
    modeloList.add("300");

  int n = modeloList.size();
   for (i=0; i<n; i++) {
      System.out.printf("Posição %d- %s\n", i, modeloList.get(i));
    }

A minha dúvida é a seguinte, percorrer o Array, e verificar tipo assim, ao encontrar o 300 por exemplo, se tivesse no array, 300,301, ele diria pelo primeiro 3 que seria válido para ser mostrado, e se tivesse o array 100,101,200,201,300, ele pelo último 300, ele saber que o primeiro 3, também seria válido para um usuario que fosse de 301, e 100,101, e assim sucessivamente, alguém saberia me ajudar? Isso são varios produtos, e um cliente de uma filial por exemplo 300, iria ver todos os produtos que fossem válidos para as filiais, 300, 301, 302, emfim, os codigos XXX, seria como se a primeira casa, deixasse exibir as de sua mesma filial, não sei se confundi, grato.

5 Respostas

peczenyj

vamos la

se vc fizer modelo.split(",") vc obtem um array de strings.

ou seja, qualquer string vc pode separar ( ou fazer um split )

no seu modelo vc tem N sub-strings.

no seu modeloList vc tem M elementos que podem conter entre 1 ou mais sub-strings

vc vai ter q fazer 2 loops e adicionar alguma logica ai. não é dificil porem achei o seu problema um pouco nebuloso, tente usar split e tente ver ate onde vc vai e pede mais ajuda se for o caso (explicando melhor).

soloplayer

Bom dia amigo peczenyj, realmente é um problema entanto, a lógica vai se aplicar em um sistema java/android, sei que estes dispositivos possuem recursos muito reduzidos, comparados com um PC/Not enfim, vou fazer a lógica separado e postar como ficou, mas entendi o que você me disse sim, e vou testar e postar como ficou, obrigado pela força.

soloplayer

Amigos bom dia tudo bem, cheguei a um resultado bastante significante em relação a minha lógica, segue resultado, espero que nos dispositivos móveis me renda um desempenho até bom, mas me deparei com uma situação que ao percorrer o for da primeira linha por exemplo, se eu encontrar por exemplo:

Um vendedor seja da filial 100, e ao percorrer a lista de filiais, a primeira linha esta da seguinte forma: “modeloList.add(“000,100,101,200,201,211”);” da para notar que tenho ja o 100 no segundo elemento da llinha:

Posição filial:: 1 filial:: 100
Posição 1:: 1
Vendedor da filial::: 100 Pertencente a filial:: 100"

Só que ele continuar executando o for para esta linha, ele poderia parar e verificar a proxima linha do array, a “modeloList.add(“100,301”);”, sei que isso é possivél, mas minha dúvida e como, abraço, segue o código, esta meio zuado kkkkkk, obrigado por enquanto.

identar texto pre-formatado em 4 espaços

import java.util.ArrayList;
import java.util.Arrays;

public class SelecionaFilial {

public static void main(String[] args){
	String modelo = "100,101,200,201,300";
	
	ArrayList<String> modeloList = new ArrayList();
	
	modeloList.add("000,100,101,200,201,211");
	modeloList.add("100,301");
    modeloList.add("201,100");
    modeloList.add("300");
    
    int n = modeloList.size();
    
    int i = 0;
    for(String filiais: modeloList){
    	//System.out.printf("Posição %d- %s\n", i, filiais);
    	
    	//Separando com split
    	String[] filialValida = filiais.split(",");
    	//Exibir valores separadamente
    	System.out.println("::FILIAIS VÁLIDAS:: " +Arrays.toString(filialValida));
    	System.out.println("::TAMANHO:: " +filialValida.length);
    	
    	
    	int vendedorFilial = 100;
    	
    	for(int ii = 0; ii < filialValida.length; ii++){
    		
    		String castVendedorFilial = String.valueOf(vendedorFilial);
    		
    		System.out.println("Posição filial:: " + ii + " filial:: " + filialValida[ii]);
    		System.out.println("Posição 1:: " +filialValida[ii].substring(0,1));
    		
    		if(filialValida[ii].substring(0,1).equals(castVendedorFilial.substring(0,1))){
    			System.out.println("Vendedor da filial::: " +vendedorFilial+ " Pertencente a filial:: " +filialValida[ii] );
    		}
    	}
    	System.out.println("FIM BLOCO =====================================================");
    	
    	i++;
    }
    		
    
	
}

}

soloplayer

Amigos, consegui resolver a minha lógica das filiais com a ajuda de nossos amigos, agradeço a todo, é só colocar um break no bloco a seguir:

identar texto pre-formatado em 4 espaços
    		if(filialValida[ii].substring(0,1).equals(castVendedorFilial.substring(0,1))){
    			System.out.println("Vendedor da filial::: " +vendedorFilial+ " Pertencente a filial:: " +filialValida[ii] );
    			break;
    		}

Obrigado a todos e tenham um ótimo dia.

soloplayer

Bom dia amigos, como buscar de maneira que não saia caso contenha a sentença, por exemplo, na String[] filial tenho:
FILIAL…100,101,110,120,200,201,210,211 getProdDesc… Creme Pepino Pepilon 50g Pele Normal 69001

meu vendedor tem o codigo 201, so que fiz um if da seguinte forma:

for(ListaPrecoProduto u : Collections.list(Collections.enumeration(ls))){
        //System.out.println("------------------------------------------------> " +u.getProduto().getDescricao() + " Filiais válidas::: " +u.getProduto().getCodFilial());

        //TODO Rotina para filtrar produtos conforme filial do representante.
        filialValida = u.getProduto().getCodFilial().split(",");
        Log.e("ERR.FILIAL", "FILIAL.........." +u.getProduto().getCodFilial() + " getProdDesc.. " +u.getProduto().getDescricao());
        for (int i = 0; i < filialValida.length; i++){
            if(filialValida[i].substring(0,1).equals(getCodigoFilialVendedor().substring(0,1)) || filialValida[i].substring(0,1).equals("0")){
                Log.d("FORIF", "FORIF.. filial val.. " +filialValida[i].substring(0,3) + " / getCodFilialVende... " + getCodigoFilialVendedor().substring(0,3) + " / filialValid... " + filialValida[i].substring(0,1) + " getProdDesc.. " +u.getProduto().getDescricao());
                //Log.d("filialvalida ", "somente produto filial " +u.getProduto().getDescricao() + " Filiais usuario::: " +u.getProduto().getCodFilial()  + " filialValida:: " + filialValida[i] );
                //ls.add(u);
                //break;
                continue;
            }else{
                //Remove itens diferente da filial do vendedor
                Log.d("FORIF", "FORELSE.. filial val.. " +filialValida[i].substring(0,3) + " / getCodFilialVende... " + getCodigoFilialVendedor().substring(0,3) + " / filialValid... " + filialValida[i].substring(0,1) + " getProdDesc.. " +u.getProduto().getDescricao());
                ls.remove(u);
            }
        }
    }

Como fazer um contains para não remover o item, por exemplo, por ja começar em 100, ele entra no else e remove ele da lista principal, não queria remover, porque não posso remover se ele existir na sentença, grato.

Criado 28 de agosto de 2018
Ultima resposta 8 de nov. de 2018
Respostas 5
Participantes 2