jjzjj

computeIfAbsent

全部标签

java - 为什么 ConcurrentHashMap 中的 computeIfAbsent() 方法表现不一致?

我有一个在ApacheTomcat9上运行的Java8Web应用程序。调用ConcurrentHashMap的computeIfAbsent()方法没有返回或返回时间太长.在下面给出的代码中,“AddingtoMap”行被打印出来,而“Map:”行在某些情况下根本不打印,就好像执行线程被困在方法中。一旦它被困住,任何后续调用具有相同id的相同方法也会卡住并且永远不会返回,而具有不同id的调用会立即返回。在另一个具有不同id的实例上进行测试,computeIfAbsent()方法在2分钟后返回。测试时执行代码的最大并发调用仅为20左右。根据我的理解,computeIfAbsent()是线

java - 当我使用 computeIfAbsent 计算斐波那契数时,hashmap size() 返回不正确的值

我有以下代码:importjava.math.BigInteger;importjava.util.HashMap;importjava.util.Map;publicclassDynamicFib{privatestaticMapmyMap=newHashMap();static{myMap.put(0,BigInteger.ZERO);//fibonacci(0)myMap.put(1,BigInteger.ONE);//fibonacci(1)}publicstaticBigIntegerfibonacci(intx){//System.out.println("x=["+x+"

Java 8 并行流并发分组

假设我有一个类ClassPerson{Stringname;Stringuid;Stringphone;}我正在尝试按类(class)的所有领域进行分组。我如何在JAVA8中使用并行流来转换一个ListintoMap>其中映射的键是类中每个字段的值。JAVA8以下示例按单个字段分组,我如何将一个类的所有字段放入单个Map中?ConcurrentMap>byGender=roster.parallelStream().collect(Collectors.groupingByConcurrent(Person::getGender)); 最佳答案

【Java用法】computeIfAbsent() 的使用

computeIfAbsent的使用一、背景描述二、功能发现三、示例代码一、背景描述编程中经常遇到这种数据结构,判断一个map中是否存在这个key,如果存在则处理value的数据,如果不存在,则创建一个满足value要求的数据结构放到value中。在JDK1.7之前,经常这么干,这样做起来功能是可以实现的,但是代码不够优雅。二、功能发现于是呢,在经历了时间的检验,终于千呼万唤始出来,在Java8版本中,加入了computeIfAbsent()这个api,computeIfAbsent()是Java8中Map接口新增的一个方法,用于在Map中根据指定的键获取对应的值,如果该键不存在,则使用指定的

java - Lambda 和 putIfAbsent

我发布了一个答案here其中演示使用ConcurrentMap的putIfAbsent方法的代码读取:ConcurrentMapmap=newConcurrentHashMap();publiclongaddTo(Stringkey,longvalue){//Thefinalvalueitbecame.longresult=value;//Makeanewonetoputinthemap.AtomicLongnewValue=newAtomicLong(value);//Insertmynewoneorgetmetheoldone.AtomicLongoldValue=map.putI

java - 在 ConcurrentHashMap#computeIfAbsent 中更新其他键的后果

ConcurrentHashMap#computeIfAbsent中的Javadoc说Thecomputationshouldbeshortandsimple,andmustnotattempttoupdateanyothermappingsofthismap.但是,据我所知,在mappingFunction中使用remove()和clear()方法效果很好。比如这个Keyelement=elements.computeIfAbsent(key,e->{if(usages.size()==maxSize){elements.remove(oldest);}returnloader.lo

Java 8 map 合并方法

我正在尝试创建一个HashMap,它将包含一个整数作为键和一个字符串列表作为值:Map>map=newHashMap>(30);我想以某种方式有效地填充它。我想到的是:map.merge(search_key,newArrayList(Arrays.asList(new_string)),(v1,v2)->{v1.addAll(v2);returnv1;});这段代码小而优雅,但我的问题是我在每次调用时都创建了一个新的List。有什么办法可以在第一次合并后跳过列表创建,而只在第一个创建的列表中添加new_string吗? 最佳答案

java - 递归 ConcurrentHashMap.computeIfAbsent() 调用永远不会终止。错误或 "feature"?

前段时间,I'vebloggedaboutaJava8functionalwayofcalculatingfibonaccinumbersrecursively,带有ConcurrentHashMap缓存和新的有用的computeIfAbsent()方法:importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;publicclassTest{staticMapcache=newConcurrentHashMap();publicstaticvoidmain(String[]args){System.out.pri

android - ModelCache.computeIfAbsent 不能为空

升级到AndroidStudio3Canary4后出现此错误:Gradlesyncfailed:Argumentfor@NotNullparameter'key'ofcom/android/tools/idea/gradle/project/model/ide/android/ModelCache.computeIfAbsentmustnotbenull有没有人遇到同样的问题? 最佳答案 用更新项目级build.gradle文件```dependencies{classpath'com.android.tools.build:gra

java - Java 7 中 ComputeIfAbsent 的等价物

有没有办法只在ConcurrentHashMap中不存在键的情况下运行一段代码,并将代码的结果保存到集合中?我无法使用Java8功能,因为我正在为Android开发。此外,如果不需要并且我不想为此破坏集合的原子操作,我想避免运行长时间的操作。 最佳答案 没有完全等同的方法,但通常的方法是这样的:ConcurrentMapmap=...ValuecomputeIfAbsent(Keyk){Valuev=map.get(k);if(v==null){ValuevNew=newValue(...);//orwhateverelseyoud