本文将为您提供关于如何使用新的computeIfAbsent函数?的详细介绍,我们还将为您解释编写函数newcopy的相关知识,同时,我们还将为您提供关于com.google.common.colle
本文将为您提供关于如何使用新的computeIfAbsent函数?的详细介绍,我们还将为您解释编写函数newcopy的相关知识,同时,我们还将为您提供关于com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码、com.google.common.collect.testing.testers.MapComputeIfPresentTester的实例源码、com.google.common.collect.testing.testers.MapPutIfAbsentTester的实例源码、com.intellij.ui.ComputableIcon的实例源码的实用信息。
本文目录一览:- 如何使用新的computeIfAbsent函数?(编写函数newcopy)
- com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码
- com.google.common.collect.testing.testers.MapComputeIfPresentTester的实例源码
- com.google.common.collect.testing.testers.MapPutIfAbsentTester的实例源码
- com.intellij.ui.ComputableIcon的实例源码
如何使用新的computeIfAbsent函数?(编写函数newcopy)
我非常想使用Map.computeIfAbsent,但是自从lambdas进入本科以来已经太久了。
几乎 直接来自文档:它给出了做事的旧方法的示例:
Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();String key = "snoop";if (whoLetDogsOut.get(key) == null) { Boolean isLetOut = tryToLetOut(key); if (isLetOut != null) map.putIfAbsent(key, isLetOut);}
和新方法:
map.computeIfAbsent(key, k -> new Value(f(k)));
但是在他们的示例中,我认为我不太“了解”。我将如何转换代码以使用新的lambda表达方式?
答案1
小编典典假设您有以下代码:
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
在λ表达式k ->f(k)
仅仅是该地图将传递到您的拉姆达用于计算值的键一个placeolder(参数)。因此,在示例中,键被传递给函数调用。
或者,您可以编写: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
是实例方法。
com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapComputeTester.class,MapComputeIfAbsentTester.class,MapComputeIfPresentTester.class,MapContainsKeyTester.class,MapContainsValueTester.class,MapCreationTester.class,MapEntrySetTester.class,MapEqualsTester.class,MapForEachTester.class,MapGetTester.class,MapGetorDefaultTester.class,MapHashCodeTester.class,MapIsEmptyTester.class,MapMergeTester.class,MapPutTester.class,MapPutAllTester.class,MapPutIfAbsentTester.class,MapRemoveTester.class,MapRemoveEntryTester.class,MapReplaceTester.class,MapReplaceAllTester.class,MapReplaceEntryTester.class,MapSerializationTester.class,MapSizeTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
com.google.common.collect.testing.testers.MapComputeIfPresentTester的实例源码
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapComputeTester.class,MapComputeIfAbsentTester.class,MapComputeIfPresentTester.class,MapContainsKeyTester.class,MapContainsValueTester.class,MapCreationTester.class,MapEntrySetTester.class,MapEqualsTester.class,MapForEachTester.class,MapGetTester.class,MapGetorDefaultTester.class,MapHashCodeTester.class,MapIsEmptyTester.class,MapMergeTester.class,MapPutTester.class,MapPutAllTester.class,MapPutIfAbsentTester.class,MapRemoveTester.class,MapRemoveEntryTester.class,MapReplaceTester.class,MapReplaceAllTester.class,MapReplaceEntryTester.class,MapSerializationTester.class,MapSizeTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
com.google.common.collect.testing.testers.MapPutIfAbsentTester的实例源码
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapComputeTester.class,MapComputeIfAbsentTester.class,MapComputeIfPresentTester.class,MapContainsKeyTester.class,MapContainsValueTester.class,MapCreationTester.class,MapEntrySetTester.class,MapEqualsTester.class,MapForEachTester.class,MapGetTester.class,MapGetorDefaultTester.class,MapHashCodeTester.class,MapIsEmptyTester.class,MapMergeTester.class,MapPutTester.class,MapPutAllTester.class,MapPutIfAbsentTester.class,MapRemoveTester.class,MapRemoveEntryTester.class,MapReplaceTester.class,MapReplaceAllTester.class,MapReplaceEntryTester.class,MapSerializationTester.class,MapSizeTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
@SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List<Class<? extends AbstractTester>> getTesters() { return Arrays.<Class<? extends AbstractTester>>asList( MapClearTester.class,MapToStringTester.class); }
com.intellij.ui.ComputableIcon的实例源码
private void update(PsiElement element) { if (element != null && element.isValid()) { final ItemPresentation presentation = ((NavigationItem)element).getPresentation(); myIconopen = presentation == null ? null : ComputableIcon.create(presentation,true); myIconClosed = presentation == null ? null : ComputableIcon.create(presentation,false); myPresentableText = presentation == null ? UsageViewUtil.createNodeText(element) : presentation.getPresentableText(); if (myIconopen == null || myIconClosed == null) { if (element instanceof PsiMetaOwner) { final PsiMetaOwner psiMetaOwner = (PsiMetaOwner)element; final PsiMetaData MetaData = psiMetaOwner.getMetaData(); if (MetaData instanceof PsiPresentableMetaData) { final PsiPresentableMetaData psiPresentableMetaData = (PsiPresentableMetaData)MetaData; if (myIconopen == null) myIconopen = ComputableIcon.create(psiPresentableMetaData); if (myIconClosed == null) myIconClosed = ComputableIcon.create(psiPresentableMetaData); } } else if (element instanceof PsiFile) { final PsiFile psiFile = (PsiFile)element; final VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile != null) { myIconopen = ComputableIcon.create(virtualFile); myIconClosed = ComputableIcon.create(virtualFile); } } } } }
public void update() { final PsiElement element = getElement(); if (element != null && element.isValid()) { final ItemPresentation presentation = ((NavigationItem)element).getPresentation(); myIconopen = presentation != null ? ComputableIcon.create(presentation,true) : null; myIconClosed = presentation != null ? ComputableIcon.create(presentation,false) : null; myPresentableText = presentation != null ? presentation.getPresentableText() : UsageViewUtil.createNodeText(element); if (myIconopen == null || myIconClosed == null) { if (element instanceof PsiMetaOwner) { final PsiMetaOwner psiMetaOwner = (PsiMetaOwner)element; final PsiMetaData MetaData = psiMetaOwner.getMetaData(); if (MetaData instanceof PsiPresentableMetaData) { final PsiPresentableMetaData psiPresentableMetaData = (PsiPresentableMetaData)MetaData; if (myIconopen == null) myIconopen = ComputableIcon.create(psiPresentableMetaData); if (myIconClosed == null) myIconClosed = ComputableIcon.create(psiPresentableMetaData); } } else if (element instanceof PsiFile) { final PsiFile psiFile = (PsiFile)element; final VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile != null) { myIconopen = ComputableIcon.create(virtualFile); myIconClosed = ComputableIcon.create(virtualFile); } } } } }
private void update(PsiElement element) { if (element != null && element.isValid()) { final ItemPresentation presentation = ((NavigationItem)element).getPresentation(); myIconopen = presentation == null ? null : ComputableIcon.create(presentation,false); myPresentableText = presentation == null ? UsageViewUtil.createNodeText(element) : presentation.getPresentableText(); if (myIconopen == null || myIconClosed == null) { if (element instanceof PsiMetaOwner) { final PsiMetaOwner psiMetaOwner = (PsiMetaOwner)element; final PsiMetaData MetaData = psiMetaOwner.getMetaData(); if (MetaData instanceof PsiPresentableMetaData) { final PsiPresentableMetaData psiPresentableMetaData = (PsiPresentableMetaData)MetaData; if (myIconopen == null) myIconopen = ComputableIcon.create(psiPresentableMetaData); if (myIconClosed == null) myIconClosed = ComputableIcon.create(psiPresentableMetaData); } } else if (element instanceof PsiFile) { final PsiFile psiFile = (PsiFile)element; final VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile != null) { myIconopen = ComputableIcon.create(virtualFile); myIconClosed = ComputableIcon.create(virtualFile); } } } } }
@Override public Icon getIcon(boolean open) { final ComputableIcon computableIcon = open ? myIconopen : myIconClosed; return computableIcon == null ? null : computableIcon.getIcon(); }
@Override public Icon getIcon(boolean open) { final ComputableIcon computableIcon = open ? myIconopen : myIconClosed; return computableIcon == null? null : computableIcon.getIcon(); }
@Override public Icon getIcon(boolean open) { final ComputableIcon computableIcon = open ? myIconopen : myIconClosed; return computableIcon == null ? null : computableIcon.getIcon(); }
关于如何使用新的computeIfAbsent函数?和编写函数newcopy的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码、com.google.common.collect.testing.testers.MapComputeIfPresentTester的实例源码、com.google.common.collect.testing.testers.MapPutIfAbsentTester的实例源码、com.intellij.ui.ComputableIcon的实例源码等相关知识的信息别忘了在本站进行查找喔。
本文标签: