CodeGym /Blog Jawa /Acak /Metode HashMap computeIfAbsent() ing Jawa
John Squirrels
tingkat
San Francisco

Metode HashMap computeIfAbsent() ing Jawa

Diterbitake ing grup
Java 8, kaya sing kita ngerti, ngenalake Stream API. Iki toolkit banget migunani, nanging wis drawback, ora kalebu Map s. Nanging, Java 8 nambahake sawetara cara sing migunani kanggo antarmuka Peta dhewe kanggo nyuda jumlah kode "ala". Dadi, yen sampeyan kudu nindakake sawetara tumindak kanthi nilai ing Peta , yen ana, ana cara ComputeIfPresent () ing Peta Jawa. Yen sampeyan kudu nindakake soko karo nilai sing ora ana ing Peta , sampeyan bisa nggunakake cara ComputeIfAbsent () . Kita bakal nimbang ing artikel iki.

tanda tangan metode computeIfAbsent().


default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Metode Map (lan HashMap ) computeIfAbsent () njupuk rong paramèter. Parameter pisanan yaiku kunci. Parameter kapindho yaiku mappingFunction . Ing metode iki fungsi pemetaan mung diarani yen pemetaan ora ditampilake.

Carane cara computeIfAbsent () dianggo

Kita wis ngerti, Map.computeIfAbsent () cara liwati loro paramèter, tombol lan fungsi kanggo ngitung Nilai kanggo mappingFunction tombol iki . Iki minangka algoritma logis saka metode kasebut:
  1. Cara pisanan mriksa yen kunci sing dilewati dituduhake ing Peta kita .
  2. Yen tombol dituduhake ing Peta (lan ora null), banjur cara ora nindakake apa-apa.
  3. Liyane yen tombol ora makili ing Peta (utawa iku null) cara ngetung Nilai nggunakake mappingFunction kanggo tombol.
  4. Yen nilai asil ora null, banjur nulis pasangan kunci-nilai kanggo peta.
Ayo nulis logika sing padha karo kode:

if (map.get(key) == null) 
{ 
V newValue = mappingFunction.apply(key); 
if (newValue != null) map.put(key, newValue); 
}

conto kode computeIfAbsent().

Dadi, yen nilai kasebut ora ana ing Peta , cara kasebut bakal nindakake owah-owahan. Ayo goleki conto sing prasaja:

import java.util.HashMap;
import java.util.Map;

//map.computeIfAbsent example 
public class ComputeIfAbsentExample {

       public static void main(String[] args) {

           Map<String, String> myMap = new HashMap<>();

           myMap.computeIfAbsent("here is my key", key -> key + ", " + "and this is a new value");

           System.out.println(myMap.get("here is my key"));
       }
}
Output yaiku:
punika tombol sandi, lan iki nilai anyar
Saiki ayo ndeleng apa cara sing bakal ditindakake nalika ana nilai sing diwenehake ing Peta . Spoiler tandha: Iku ora bakal nindakake apa-apa.

import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample2 {

       public static void main(String[] args) {

           Map<String, String> myMap = new HashMap<>();
           myMap.put("here is my key", "and here is my value");

           myMap.computeIfAbsent("here is my key", key -> key + ", " + "and this is a new value");

           System.out.println(myMap.get("here is my key"));
       }
}
Punika output:
lan iki nilaiku
Minangka sampeyan bisa ndeleng, regane tetep ora owah.

Siji liyane ComputeIfAbsent () conto

Yen sampeyan kenal karo konsep caching, cara computeIfAbsent () bisa uga ngelingake sampeyan. Ayo goleki conto parsing sing luwih rumit. Ayo dadi nelpon cara computeIfAbsent () kaping pindho kanggo mesthekake yen ing kasus pisanan owah-owahan Nilai, nalika ing kaloro ora.

import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample {
   private static Map<String, Long> numbersMap = new HashMap<>();

   public static Long stringToLong(String str) {
       return numbersMap.computeIfAbsent(str, key -> {
           System.out.println("parsing: " + key);
           return Long.parseLong(key);
       });
   }

   public static void main(String[] args) {
       // will print:
       // > parsing: 10
       // > parsing: 25
       // > 10+25=35
       System.out.println("10+25=" + (stringToLong("10") + stringToLong("25")));
       // will print:
       // > parsing: 20
       // > 10+25=45
       // only "20" will be parsed this time, since "25" was already parsed and placed into `numbersMap` map before
       System.out.println("20+25=" + (stringToLong("20") + stringToLong("25")));
       // will print:
       // > 10+20=30
       // no parsing will occur, since both "10" and "20" were already parsed and placed into `numbersMap` map before
       System.out.println("10+20=" + (stringToLong("10") + stringToLong("20")));
   }

}
Punika output:
parsing: 10 parsing: 25 10+25=35 parsing: 20 20+25=45 10+20=30
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION