Java 语法小记

说明
本文用于记录日常遇到的不常见的 Java 语法。

数组

mapToInt()

.mapToInt() 方法 是 Java 8 中 流 API 的一种转换方法,它可以将一个流中的元素转换为 int 类型。

该方法接收一个 ToIntFunction 类型的参数 mapper,它是一个函数式接口,定义了一个 applyAsInt() 方法,可以将流中的元素转换为 int 类型。


从一道题目引出:https://leetcode.cn/problems/decompress-run-length-encoded-list/

class Solution {
    public int[] decompressRLElist(int[] nums) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i += 2)
            for (int j = 0; j < nums[i]; j++)
                list.add(nums[i + 1]);
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

这样可以解决 toArray(T[] a)传入的参数类型不能为基本类型。(详情可以参考:Java泛型集合的toArray方法

它还可以这样使用:

String[] array = {"hello", "world", "today"};
int[] l = Arrays.stream(array).mapToInt(String::length).toArray();

或者

String[] array = {"hello", "world", "today"};
int[] l = Arrays.stream(array).mapToInt(x -> x.length()).toArray();

用来 求一个String数组的各个元素长度的对应数组。

补充:关于 .stream()

Java中List的.stream()方法是一个用于获取集合对象的流式操作的方法。它可以让您使用lambda表达式或方法引用来对集合中的元素进行各种便利、高效的聚合操作或批量数据操作。

例如,您可以使用.stream()方法来过滤、排序、映射、统计、分组、去重或收集集合中的元素。

.stream()方法是从Java 8开始引入的,它返回一个顺序流,也就是说流中的元素按照集合中的顺序排列。如果您想要返回一个并行流,也就是说流中的元素可以并发处理,您可以使用.parallelStream()方法。

.stream()方法是一个终端操作,也就是说它会消费掉流中的元素,并返回一个新的集合对象。如果您想要对流中的元素进行多次操作,您需要重新获取流对象。

补充:关于 Integer::intValue

因为 intValue 是一个非静态方法,它需要一个 Integer 对象作为调用者,而不是 Integer 类。所以不能直接使用 Integer.intValue。

字符串

indexOf

在这里插入图片描述

哈希表

int c = cnt.merge(new String(s), 1, Integer::sum);

在这里插入图片描述
可以替代下面代码的效果

String s = new String(r);
cnt.put(s, cnt.getOrDefault(s, 0) + 1);
int c = cnt.get(s);

同样 Integer::sum 也可以使用 lambda 表达式来替代:(a, b) -> a + b

如果 remappingFunction 计算出的新值为 null,则移除该键值对。例如 scores.merge("Bob", 0, (oldValue, newValue) -> null);

用merge来合并哈希表的列表类型值。

// 您可以使用 merge() 方法,传入 k , v 和一个合并函数,将 v 添加到 k 对应的列表中
// 如果 k 不存在于哈希表中,那么会创建一个新的列表并将 v 添加进去
hashtable.merge (k, new ArrayList<> (Arrays.asList (v)), (oldList, newList) -> {
    // 合并函数的逻辑是将新列表中的所有元素添加到旧列表中
    oldList.addAll (newList);
    return oldList;
});

参考资料

jdk11新特性——新加的一些更实用的API

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wei *

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值