Valores HashMap

7 respostas Resolvido
M

Pessoal estou precisando pegar o valor de uma key no hashmap e fazer uma verificacao se houve alteracao, pois entao precisar fazer as decisoes com essaa informacao.
Segue o codigo:

public class TestdoWalk {

public static void main(String[] args) throws Exception {
	CommunityTarget target = new CommunityTarget();
	target.setCommunity(new OctetString("public"));
	target.setAddress(GenericAddress.parse("udp:172.19.138.130/161")); 
	target.setRetries(2);
	target.setTimeout(1500);
	target.setVersion(SnmpConstants.version2c);
           // String query = null;
	//.1.3.6.1.4.1.34592.1.3.4.1.1.11 OLT save
	Map<String, String> result = doWalk(".1.3.6.1.4.1.34592.1.3.4.1.1.11", target);
            
            List<String> targetList = new ArrayList<>(result.values());
            
            Map<String,Integer> hm = new HashMap();
            for(String x:targetList){

                    if(!hm.containsKey(x)){
                        hm.put(x,1);
                        
                    }else{
                        hm.put(x, hm.get(x)+1);
                        
                        
                        //77 - 26
                        }
                     }     
                     System.out.println(hm.entrySet());

}

Neste exemplo meu valor de saida eh: [2=77, 3=26], preciso veiricar se o valor da key2, diminuiu e se o valor da key3 aumentou.

7 Respostas

D

Para pegar as chaves:

Set<String> chaves = map.keySet();
for(String chave: chaves) {
  System.out.println(chave);
}
M

Obrigado pelo retorno, sim nesse ponto eu cheguei, acontece que nao consigo manipular os valores entende, quero poder ver se o valor da key2 aumentou ou diminuiu de uma consulta para outra.

M

Por exemplo, na key temos o valor de 77, preciso ver se em uma segunda consulta este valor se mantem em 77 ou tem alterracao.

D

Não sei como funciona o SNMP, estou supondo que os valores do map estão sendo alterados constantemente, tem duas formas de verificar:

Crie uma cópia do map, depois compare o anterior com o atual (ou somente das chaves que vc precisa);

Map<String, String> resultAtual;
Map<String, String> resultAnterior;

// copia
resultAnterior = new HashMap<>();
resultAnterior.addAll(resultAtual);

// compara
if (resultAnterior.get(key2) < resultAtual.get(key2)) // ....

ou criar um Map que verifica se um valor alterou:

class ObservableMap extends HashMap<String, String> {
  final BiConsumer listener;
  ObservableMap (listener) {
    this.listener = listener;
  }
  //@override 
  public String put(String k, String valorAtual) {
    String valorAnterior = super.put(k, valorAtual);
    if (!valorAtual.equals(valorAnterior)) {
      listener.accept(valorAnterior, valorAtual); // toda vez que o valor altera, dispara o listener
    }
  }
}
M

Entendi mas como eu implemento esse seu examplo no meu codigo?
Como ele ficar utilizando o primeiro exemplo.

D
Solucao aceita

Mais ou menos assim:

Map<String, String> resultAtual = doWalk();
Map<String, String> resultAnterior;

// faz operações ...
// ...

// copia
resultAnterior = new HashMap<>();
resultAnterior.addAll(resultAtual);

// repete o doWalk, supondo que essa seja a segunda consulta
resultAtual = doWalk();

// faz operações ...
// ...

// compara
if (resultAnterior.get(key2) < resultAtual.get(key2)) // ....
M

Mano fiz conforme vc me indicou e deu certo.

public class OnlyWalk {

public HashMap<String, Integer> valida;
public Map<String,Integer> h;
public void FirstWalk()throws Exception{

            CommunityTarget target = new CommunityTarget();
	target.setCommunity(new OctetString("public"));
	target.setAddress(GenericAddress.parse("udp:xxx.xxx.xxx.xx/161")); 
	target.setRetries(2);
	target.setTimeout(1500);
	target.setVersion(SnmpConstants.version2c);
            
            Map<String, String> resultAtual = doWalk(".1.3.6.1.4.1.34592.1.3.4.1.1.11", target);
            
            System.out.println("Rodou1");
            
            List<String> targetList = new ArrayList<>(resultAtual.values());
            
            Map<String,Integer> hm = new HashMap();
            for(String x:targetList){

                    if(!hm.containsKey(x)){
                        hm.put(x,1);
                        
                    }else{
                        hm.put(x, hm.get(x)+1);
                    }
           
            System.out.println("Rodou2");  
            }
            
            Map<String,Integer> h = hm;
            HashMap<String, Integer> resultAnterior = new HashMap<>();
            resultAnterior.putAll(h);
            valida = resultAnterior;
            //resultado da pesquisa gravado.
            System.out.println("Salvou na variavel"+h.entrySet());
                            
}
/**
 *
 * @throws Exception
 */
public void SegundWalk()throws Exception{
                    
            System.out.println("Inicia segundo metedo.");
            
            CommunityTarget target1 = new CommunityTarget();
	target1.setCommunity(new OctetString("public"));
	target1.setAddress(GenericAddress.parse("udp:xxx.xxx.xxx.xx/161")); 
	target1.setRetries(2);
	target1.setTimeout(1500);
	target1.setVersion(SnmpConstants.version2c);        
            Map<String, String> result = doWalk(".1.3.6.1.4.1.34592.1.3.4.1.1.11", target1);
            
            List<String> targetList1 = new ArrayList<>(result.values());
            
               
            Map<String,Integer> hm = new HashMap();
            for(String x:targetList1){

                    if(!hm.containsKey(x)){
                        hm.put(x,1);
                        
                    }else{
                        hm.put(x, hm.get(x)+1);
                    }

            System.out.println("Rodou3");
            }
            
                    Map<String,Integer> h = hm;
                      
                    HashMap<String, Integer> resultAtual = new HashMap<>();
                    resultAtual.putAll(hm);
 
 //                   System.out.println("Salvou na variavel"+hm.entrySet());
            
   //         HashMap<String, String> result1 = new HashMap<>();
     //       result1.putAll(result);

                    if (valida.get("2") == hm.get("2")) {
                       
                    System.out.println("Todo mundo on line"+valida.entrySet());
                               
                    } else {
                    
                   Mail sends = new Mail();
                   sends.send("dialup.m@@gmail.com","xxxxxxxxx","[email removido]","Log ONU","Verificar OLT CANOAS, ONU Down");
                    System.out.println("Email enviado");
                         
                    }                           
             }

}

Criado 4 de dezembro de 2017
Ultima resposta 5 de dez. de 2017
Respostas 7
Participantes 2