我是Java新手,有点从C#过渡到Java。
java.util.function
具有一个定义为Function
的接口,该接口输入到computeIfAbsent
的{{1}}方法中。
我想定义该函数并将其委托给Map
方法。
computeIfAbsent
可行,但是我希望在func回调中使用它。但问题是map.computeIfAbsent(key, k => new SomeObject())
需要定义输入参数。如何将其设置为Function
或不带参数。
void
答案 0 :(得分:7)
computeIfAbsent
将始终具有用于传递的Function
的输入参数-这将是关键。
因此,正如您所写:
map.computeIfAbsent(key, k -> new SomeObject());
您也可以写(假设您的Map
的键是String
)
Function<String,SomeObject> func = k -> new SomeObject();
map.computeIfAbsent(key, func);
答案 1 :(得分:3)
您可以只创建一个带参数的lambda并忽略该参数来调用函数。
map.computeIfAbsent(key, k -> func());
答案 2 :(得分:2)
如果func
在计算上并不昂贵且没有副作用,那么您可以使用putIfAbsent
(注意,它是' put ',而不是'compute')并调用该方法直接。在语义上是等效的。
map.putIfAbsent(key, func());
func
每次都会进行评估,无论是否要插入它,但前提是它很快,那实际上不是问题。
答案 3 :(得分:0)
https://www.here2u.com/rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=category_id&searchCriteria[filter_groups][0][filters][0][value]=329&searchCriteria[filter_groups][0][filters][1][field]=shopify_size&searchCriteria[filter_groups][0][filters][1][value]=423&searchCriteria[filter_groups][0][filters][2][field]=shopify_color&searchCriteria[filter_groups][0][filters][2][value]=422
用于使用给定的映射函数来计算给定键的值(如果键尚未与某个值关联(或被映射为null),然后将该计算的值输入computeIfAbsent(Key, Function)
中)否则为null。按照语法
Hashmap
您可以写-
public V computeIfAbsent(K key, Function<? super K, ? extends V> remappingFunction)
或
map.computeIfAbsent(key, k -> Object());
答案 4 :(得分:0)
computeIfAbsent
具有两个参数:
key
-与指定值关联的键mappingFunction
-计算值的函数(此类型
Function,一个功能接口,它带有一个参数,
返回结果。)没有其他方法可以为方法computeIfAbsent
指定参数。这是使用此Map
方法的示例:
输入:Map<String, Integer> map: {four=4, one=1, two=2, three=3, five=5}
map.computeIfAbsent("ten", k -> new Integer(10)); // adds the new record to the map
map.computeIfAbsent("twelve", k -> null); // record is not added, the function returns a null
map.computeIfAbsent("one", k -> new Integer(999999)); // record is not updated, the key "one" already exists -
// and has a non-null value
map.put("eleven", null); // new record with null value
map.computeIfAbsent("eleven", k -> new Integer(11)); // updates the record with new value
输出:{four=4, one=1, eleven=11, ten=10, two=2, three=3, five=5}
考虑代码:map.computeIfAbsent("ten", k -> new Integer(10));
代码说我想向map
插入一个新的映射(键-值对)。方法computeIfAbsent
需要指定 key ,即“十”。 value 是从Function
派生而来的,它以键作为输入参数并产生结果;结果被设置为映射的值。
在该示例中,键值对添加到地图:“ ten”,10。
lambda表达式k -> new Integer(10)
是功能接口 Function<String, Integer>
的实例。该代码也可以表示为:
Function<String, Integer> fn = k -> new Integer(10);
map.computeIfAbsent("ten", fn);