मान लीजिए आप निम्नलिखित कोड है:
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Test {
public static void main(String[] s) {
Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();
whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));
whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));
}
static boolean f(String s) {
System.out.println("creating a value for \""+s+'"');
return s.isEmpty();
}
}
तो फिर तुम संदेश creating a value for "snoop"
ठीक एक बार computeIfAbsent
के दूसरे मंगलाचरण के रूप में देखेंगे कि कुंजी के लिए एक मूल्य पहले से ही वहाँ है। लैम्ब्डा अभिव्यक्ति k -> f(k)
में k
कुंजी की गणना करने के लिए मानचित्र आपके लैम्ब्डा को पास करने वाली कुंजी के लिए केवल एक प्लेसहोल्डर (पैरामीटर) है। तो उदाहरण में कुंजी फ़ंक्शन आमंत्रण को पास कर दी जाती है।
वैकल्पिक रूप से आप एक हेलपर विधि के बिना एक ही परिणाम प्राप्त करने के लिए whoLetDogsOut.computeIfAbsent("snoop", k -> k.isEmpty());
लिख सकते हैं (लेकिन तब आप डिबगिंग आउटपुट नहीं देखेंगे)। और यहां तक कि सरल, क्योंकि यह एक मौजूदा विधि के लिए एक साधारण प्रतिनिधिमंडल है जिसे आप लिख सकते हैं: whoLetDogsOut.computeIfAbsent("snoop", String::isEmpty);
इस प्रतिनिधिमंडल को लिखे जाने वाले किसी भी पैरामीटर की आवश्यकता नहीं है।
अपने प्रश्न में उदाहरण के करीब होने के लिए, आप इसे whoLetDogsOut.computeIfAbsent("snoop", key -> tryToLetOut(key));
के रूप में लिख सकते हैं (इससे कोई फ़र्क नहीं पड़ता कि आप k
या key
पैरामीटर का नाम दें)। या इसे whoLetDogsOut.computeIfAbsent("snoop", MyClass::tryToLetOut);
के रूप में लिखें यदि tryToLetOut
static
या whoLetDogsOut.computeIfAbsent("snoop", this::tryToLetOut);
है tryToLetOut
एक उदाहरण विधि है।
मुझे यकीन है कि तुम वहाँ उदाहरण से समझ में नहीं आता क्या नहीं कर रहा हूँ के बारे में एक अच्छा बात किया था? –
"के" क्या है? क्या यह एक चर परिभाषित किया जा रहा है? "नया मूल्य" के बारे में - क्या यह जावा 8 से कुछ है, या किसी ऑब्जेक्ट का प्रतिनिधित्व करने के लिए मुझे परिभाषित करने या ओवरराइड करने की आवश्यकता है? WhoLetDogsOut.computeIfAbsent (कुंजी, के -> नया बूलियन (tryToLetOut (k))) संकलित नहीं करता है, इसलिए मुझे कुछ याद आ रहा है ... –
वास्तव में संकलित नहीं करता है? यह किस त्रुटि का उत्पादन करता है? – axtavt