Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 默认方法和Lambda供应商回调_Java_Lambda - Fatal编程技术网

Java 默认方法和Lambda供应商回调

Java 默认方法和Lambda供应商回调,java,lambda,Java,Lambda,我欢迎API中的方法轻松创建默认初始化。 例如在HashMaps中。但为什么没有向他们提供供应商Lambda方法或者我错过了一个重要的步骤,或者我没有学习最新的JavaAPI版本 标准(Java8)版本: Map data=newhashmap(); List integersList=datas.getOrDefault(“somekey”,newarraylist()); 这将在代码执行时实例化一个新的ArrayList,无论是否需要新列表 所需的Lambda供应商版本: Map<S

我欢迎API中的方法轻松创建默认初始化。 例如在HashMaps中。但为什么没有向他们提供供应商Lambda方法或者我错过了一个重要的步骤,或者我没有学习最新的JavaAPI版本

标准(Java8)版本:

Map data=newhashmap();
List integersList=datas.getOrDefault(“somekey”,newarraylist());
这将在代码执行时实例化一个新的ArrayList,无论是否需要新列表

所需的Lambda供应商版本:

Map<String,List<Integer>> datas = new HashMap<>();
List<Integer> integersList = datas.getOrDefault( "somekey", ()->new ArrayList() );
Map data=newhashmap();
List integersList=datas.getOrDefault(“somekey”,()->newarraylist());
仅当所需密钥不在映射中时才会实例化(或执行某些实例化代码)

getOrDefault()方法的代码可能如下所示:

public V getOrDefault( K key, Supplier<V> supplier ) {
  if ( !super.containsKey( key ) && supplier != null ) {
    super.put( key, supplier.get() );
  }
  return super.get( key );
}
public V getOrDefault(K键,供应商){
如果(!super.containsKey(键)&&supplier!=null){
super.put(key,supplier.get());
}
返回super.get(key);
}
为什么他们最初不这样构建它,或者后来添加了这样的功能

我想还有更多的例子说明Lambda可以解决不必要的代码执行,而不仅仅是这个例子中的映射

顺便说一句:很抱歉再次提出一个问题,但我不知道如何用不同的术语准确地查找我的问题。。。 欢迎发布有用的链接


感谢您的共享知识:-)

自Java 8以来,您一直在寻找的东西。看看HashMap的javadoc,特别是方法。如果使用提供的键找不到新条目,此方法允许向HashMap添加新条目

Examaple:

Map<Integer, String> map = new HashMap();
String created = map.computeIfAbsent(1, k -> "Test");
System.out.println(created);
Map Map=newhashmap();
字符串created=map.computeIfAbsent(1,k->“Test”);
System.out.println(已创建);

上面的代码将触发HashMap调用提供的函数来添加新条目,因为它找不到现有条目。它既返回新条目,又调用Hashmap.put方法来添加它。

您要查找的内容自Java 8以来就存在了。看看HashMap的javadoc,特别是方法。如果使用提供的键找不到新条目,此方法允许向HashMap添加新条目

Examaple:

Map<Integer, String> map = new HashMap();
String created = map.computeIfAbsent(1, k -> "Test");
System.out.println(created);
Map Map=newhashmap();
字符串created=map.computeIfAbsent(1,k->“Test”);
System.out.println(已创建);

上面的代码将触发HashMap调用提供的函数来添加新条目,因为它找不到现有条目。它既返回新条目,又调用Hashmap.put方法来添加它。

是否正在查找ComputeFabSent?
getOrDefault()
从未以集合/映射值为主要目标设计。常见的用例是默认值是不可变的。您可以使用
datas.getOrDefault(“somekey”,Collections.emptyMap())
,或者使用回答中提到的
computeIfAbsent()
。@Eran是的。谢谢你的邀请和展示。好的,这都是关于学习API的。我真丢脸:-(但我很困惑,因为getOrDefault——听起来它可以做我需要的事情,而且它可以超载来做我需要的事情。ComputeFabSent听起来像是在计算任何东西,但不设置值或更改状态。但这是我个人的观点。就像我说的:这都是关于学习API的。Jai,谢谢分享。你在找我吗r computeIfAbsent?
getOrDefault()
从未将集合/映射值作为主要目标进行设计。常见的使用情况是默认值是不可变的。您可以使用
datas.getOrDefault(“somekey”,Collections.emptyMap())
,或者使用
computeIfAbsent())
如回答中所述。@Eran是的。感谢您的提问和展示。好的,这都是关于学习API的。真为我感到羞耻:-(但我很困惑,因为getOrDefault——听起来它可以做我需要的事情,而且它可以超载来做我需要的事情。computeIfAbsent听起来像是在计算任何东西,但不设置值或更改状态。但这是我个人的观点。就像我说的:这都是关于学习API的。Jai,谢谢分享。它的副作用f这两种方法是不同的。
getOrDefault
不向映射中添加元素,而
ComputeFabSent
会添加元素。因此,它并不完全满足相同的需求。您是正确的,它们应该执行不同的操作,但对于原始问题和代码段,它们应该使用ComputeFabSent。副作用是这两种方法的CT是不同的。
getOrDefault
不会向映射添加元素,而
ComputeFabSent
会添加元素。因此,它不能完全满足相同的需求。正确的是,它们应该执行不同的操作,但对于原始问题和代码段,它们应该使用ComputeFabSent。