假如我们现在有一需求,需要统计一个字符串中各个字母出现的频率,然后从中找出频率最高的字母。让我们先来看看jdk8之前的写法。
public static void main(String[] args) { String str = "hello java, i am vary happy! nice to meet you"; // jdk1.8之前的写法 HashMap<Character, Integer> result1 = new HashMap<>(32); for (int i = 0; i < str.length(); i++) { char curChar = str.charAt(i); Integer curVal = result1.get(curChar); if (curVal == null) { curVal = 1; } else { curVal += 1; } result1.put(curChar, curVal); } }
但是jdk8后,map给我们提供了更为便捷的接口方法,那就是本文要说的重点compute方法。
Map<String,Integer> map = new HashMap<>(32); String str = "hello java, i am vary happy! nice to meet you"; for(char c:str.toCharArray()){ map.compute(String.valueOf(c),(k,v)->v==null?1:v+1); }
比如判断品牌报名的次数,也可以用如下方法
//key:brandId value:次数 Map<String,Integer> appliedBrandCountMap = new HashMap<>(); for (Long targetBrandId : brandIdList) { if (targetBrandId.equals(Long.valueOf(brandId))) { appliedBrandCountMap.compute(brandId, (k, v) -> v == null ? 1 : v + 1); } }
相关推荐
此外,Java8 中 Map 接口还引入了其他一些新的方法,例如 computeIfAbsent()、computeIfPresent()、compute()、merge() 等,这些方法可以帮助我们更方便地处理 Map 中的数据。 Java8 中 Map 接口的新方法可以帮助...
Java 8 Map 中新增的方法使用总结 Java 8 对 Map 增加了许多实用的默认方法,如 getOrDefault, forEach, replace, replaceAll, putIfAbsent, remove(key, value), computeIfPresent, computeIfAbsent, compute 和 ...
`ConcurrentHashMap`、`CopyOnWriteArrayList`和`CopyOnWriteArraySet`等并发集合类在Java 8中得到了改进,提供了更高效的并发操作,如新的`compute()`、`computeIfAbsent()`和`merge()`方法。 **10. 类型接口...
5. **Lambda表达式**:Java 8引入的Lambda表达式简化了函数式编程,可能用于`Map`的迭代和更新,例如`map.forEach((k, v) -> v++)`这样的表达式。 6. **输出结果**:最后,程序会将频率统计结果写入文件,这可能...
10. **Map接口增强**:Java 8对`Map`接口进行了增强,添加了`forEach`, `getOrDefault`, `putIfAbsent`, `compute`, `merge`等方法,使得操作Map更加方便。 11. **构造器引用**:类似于方法引用,构造器引用允许...
`ConcurrentHashMap`在JDK8中进行了优化,提供了新的`compute()`, `computeIfAbsent()`, `computeIfPresent()`等方法,可以在保证线程安全的同时进行高效的数据更新。 以上只是JDK8 API中的一部分亮点,实际使用中...
- `compute`, `computeIfAbsent`, `computeIfPresent`, `merge`: 这些方法用于根据给定条件更新或计算Map中的值。 - `putIfAbsent`, `remove(key, value)`, `replace`: 这些操作提供了原子性的添加、删除和替换...
例如,可以使用`filter()`过滤元素,`map()`进行转换,`reduce()`执行累积计算。 3. **方法引用和构造器引用** 方法引用和构造器引用是与Lambda表达式相关的特性,它们允许直接引用已有方法或构造器,而不是通过...
下面,我们将深入探讨JDK 8中的关键知识点。 1. **Lambda表达式**: Lambda表达式是JDK 8最具代表性的新特性,它简化了函数式编程,允许开发者用更简洁的方式处理匿名函数。例如,你可以使用lambda表达式来定义...
Lambda表达式和Java集合框架是Java8中两个重要的概念,本文主要介绍了这两个概念的相关知识,并对Java集合框架中新增的方法进行了详细的讲解。下面是相关知识点的总结: 一、Lambda表达式 Lambda表达式是Java8中...
### Java之Stream——Java 8的新特性详解 #### Stream简单介绍 Stream 是 Java 8 中引入的一个重要新特性,它代表了一种数据流处理的新方式。不同于传统的集合框架(如 List 和 Set)主要关注数据存储的方式,...
3. **默认方法**:接口在Java 8中新增了默认方法,允许在接口中定义带实现的方法,这样不破坏向后兼容性,同时扩展了接口的功能。例如,`Collection`接口中的`forEach()`方法就是默认方法。 4. **日期和时间API**:...
- **Lambda表达式**:Java 8最大的变革之一,允许开发者以更简洁的方式编写匿名函数,使得代码更加简洁且易于理解。 - **函数接口**:如`Runnable`, `Callable`等,Java 8新增了`Supplier`, `Consumer`, `Function...
9. **Map 的新操作**:Java 8 对`Map`接口进行了扩展,增加了如`compute`, `merge`, `putIfAbsent`等方法,方便了键值对的计算和更新。练习可能会涵盖这些方法的使用场景。 10. **Method References**:除了lambda...
2. `ClassWriter.COMPUTE_FRAMES`: 这是一个常量,表示让ASM自动计算并插入堆栈映射帧(Stack Map Frames)。这对于JVM的动态类型检查是必要的,特别是当使用Java 7及以上版本时。 3. `visit()`, `visitEnd()`, `...
巧用HashMap统计单词出现次数 ...使用Java 8中的compute和merge方法,可以简洁地统计单词出现的次数。compute方法和merge方法都可以实现单词统计,但compute方法更加灵活,可以在单词出现次数的基础上进行其他操作。
HashSet的元素不保证顺序,但在Java 8中,通过使用`LinkedHashSet`可以保持元素的插入顺序。此外,TreeSet也有了改进,它可以按照自然排序或者自定义比较器进行排序。 映射接口Map也得到了扩展,新添加了`Map.Entry...
JDK的API文档是Java程序员的重要参考资料,它详细列出了Java平台标准版(Java SE)1.8中所有可用的类、接口、方法和构造函数,以及它们的使用说明和示例。 **标签:“jdk”,“java”,“api”** 这些标签揭示了...
Lambda expressions were introduced in Java 8 as a significant feature to enhance functional programming capabilities within the Java ecosystem. These expressions allow developers to treat functions as...
在Java中,可以使用`java.util.regex`包中的类来匹配和操作字符串。在这个例子中,程序读取文件,然后使用正则表达式分割单词,通过`Map`来存储每个单词出现的次数。`Map.containsKey()`方法检查`Map`中是否存在指定...