GVKun编程网logo

如何使用新的computeIfAbsent函数?(编写函数newcopy)

15

本文将为您提供关于如何使用新的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)

如何使用新的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);好像tryToLetOutstaticwhoLetDogsOut.computeIfAbsent("snoop",this::tryToLetOut);如果tryToLetOut是实例方法。

com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码

com.google.common.collect.testing.testers.MapComputeIfAbsentTester的实例源码

项目:guava-mock    文件:MapTestSuiteBuilder.java   
@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);
}
项目:googles-monorepo-demo    文件:MapTestSuiteBuilder.java   
@SuppressWarnings("unchecked") // Class parameters must be raw.
@Override
protected List<Class<? extends AbstractTester>> getTesters() {
  return Arrays.<Class<? extends AbstractTester>>asList(
      MapClearTester.class,MapToStringTester.class);
}
项目:guava    文件:MapTestSuiteBuilder.java   
@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的实例源码

com.google.common.collect.testing.testers.MapComputeIfPresentTester的实例源码

项目:guava-mock    文件:MapTestSuiteBuilder.java   
@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);
}
项目:googles-monorepo-demo    文件:MapTestSuiteBuilder.java   
@SuppressWarnings("unchecked") // Class parameters must be raw.
@Override
protected List<Class<? extends AbstractTester>> getTesters() {
  return Arrays.<Class<? extends AbstractTester>>asList(
      MapClearTester.class,MapToStringTester.class);
}
项目:guava    文件:MapTestSuiteBuilder.java   
@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的实例源码

com.google.common.collect.testing.testers.MapPutIfAbsentTester的实例源码

项目:guava-mock    文件:MapTestSuiteBuilder.java   
@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);
}
项目:googles-monorepo-demo    文件:MapTestSuiteBuilder.java   
@SuppressWarnings("unchecked") // Class parameters must be raw.
@Override
protected List<Class<? extends AbstractTester>> getTesters() {
  return Arrays.<Class<? extends AbstractTester>>asList(
      MapClearTester.class,MapToStringTester.class);
}
项目:guava    文件:MapTestSuiteBuilder.java   
@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的实例源码

com.intellij.ui.ComputableIcon的实例源码

项目:intellij-ce-playground    文件:PsiElement2UsageTargetAdapter.java   
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);
        }
      }
    }
  }
}
项目:tools-idea    文件:PsiElement2UsageTargetAdapter.java   
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);
        }
      }
    }
  }
}
项目:consulo    文件:PsiElement2UsageTargetAdapter.java   
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);
        }
      }
    }
  }
}
项目:intellij-ce-playground    文件:PsiElement2UsageTargetAdapter.java   
@Override
public Icon getIcon(boolean open) {
  final ComputableIcon computableIcon = open ? myIconopen : myIconClosed;
  return computableIcon == null ? null : computableIcon.getIcon();
}
项目:tools-idea    文件:PsiElement2UsageTargetAdapter.java   
@Override
public Icon getIcon(boolean open) {
  final ComputableIcon computableIcon = open ? myIconopen : myIconClosed;
  return computableIcon == null? null : computableIcon.getIcon();
}
项目:consulo    文件:PsiElement2UsageTargetAdapter.java   
@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的实例源码等相关知识的信息别忘了在本站进行查找喔。

本文标签: