Java 集合 Map Stream流

目录

[集合遍历for each](#集合遍历for each)

map案例

[​编辑 这种数组的遍历是【index】​编辑map排序【对象里重写compareTo​编辑map排序【匿名内部类+lambda​编辑](#编辑 这种数组的遍历是【index】编辑map排序【对象里重写compareTo编辑map排序【匿名内部类+lambda编辑)

[stream流​编辑 ​编辑获取:](#stream流编辑 编辑获取:)

map的键是set集合,获取方法map.keySet()

[map的值是collection 集合,获取方法map.values()​编辑​编辑](#map的值是collection 集合,获取方法map.values()编辑编辑)

处理:​编辑

[stream流的map加工​编辑 合并(没有主调对象)​编辑](#stream流的map加工编辑 合并(没有主调对象)编辑)

map的stream流的map方法:

终结流​编辑取最大值​编辑

stream的收集

​编辑

右端改一下tolist/set,左端可以i用list接------可重复,也可用set接------无重复​编辑

[收集到数组​编辑 收集到map​编辑](#收集到数组编辑 收集到map编辑)

default

[可变参数 类型。。。values​编辑](#可变参数 类型。。。values编辑)

[collections​编辑 ​编辑](#collections编辑 编辑)

[斗地主​编辑 ​编辑​编辑](#斗地主编辑 编辑编辑)


集合遍历for each

本质是匿名内部类,重写了遍历到每个元素时调用的方法accept,可以简化成lambda形式。

map案例

这种数组的遍历是【index】map排序【对象里重写compareTomap排序【匿名内部类+lambda

stream流 获取:

map的键是set集合,获取方法map.keySet()

map的值是collection 集合,获取方法map.values()

处理:

stream流的map加工 合并(没有主调对象)

map的stream流的map方法:

Map对象的stream流的map方法: 举个例子演示

ChatGLM

在Java中,Map对象的stream流并不直接存在于Map接口中,但是你可以通过MapentrySet()keySet()values()方法来获取对应的流,然后使用map方法进行操作。下面是一个例子,演示如何使用MapentrySet()方法来获取流,并使用map方法来处理每个条目:

java

复制

复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapStreamExample {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // 使用entrySet()获取流,然后使用map方法处理每个条目
        Map<String, Integer> updatedMap = map.entrySet().stream()
            .map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue() * 2))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        // 打印更新后的Map
        updatedMap.forEach((key, value) -> System.out.println(key + ": " + value));
    }
}

在这个例子中:

  1. 我们首先创建了一个HashMap,其中包含了一些水果的名称和对应的数量。
  2. 使用entrySet()方法获取Map的条目集合并转换为流。
  3. 接着,我们调用map方法,并传递一个lambda表达式,该表达式将每个条目的值乘以2。这里我们使用了AbstractMap.SimpleEntry来创建新的键值对。
  4. 使用collect方法将流收集回一个新的Map对象。
  5. 最后,我们使用forEach方法遍历新的Map,并打印出每个键值对。

输出结果将是:

复制

复制代码
Apple: 2
Banana: 4
Cherry: 6

每个值都是原Map中对应值的两倍。这个例子展示了如何使用Mapstream流和map方法来转换Map中的元素。注意,我们在map方法中使用的是AbstractMap.SimpleEntry来创建新的条目,这是因为map方法需要返回一个新的流,而Map.Entry是一个接口,不能直接实例化。AbstractMap.SimpleEntry是一个实现了Map.Entry接口的简单实现类,可以用于这种场景。

用户_uBiEPA

Map对象的stream流的map方法:键都变成原来的字符串+"*%¥#@",值都在原来的基础上加100 举个例子演示

ChatGLM

引用

好的,下面是一个Java示例,演示如何使用Map对象的stream流和map方法来将每个键都变成原来的字符串加上"*%¥#@",并将每个值都在原来的基础上加100:

java

复制

复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapStreamExample {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // 使用entrySet()获取流,然后使用map方法处理每个条目
        Map<String, Integer> updatedMap = map.entrySet().stream()
            .map(entry -> new AbstractMap.SimpleEntry<>(
                entry.getKey() + "*%¥#@", // 键变成原来的字符串加上"*%¥#@"
                entry.getValue() + 100    // 值在原来的基础上加100
            ))
            .collect(Collectors.toMap(
                AbstractMap.SimpleEntry::getKey,
                AbstractMap.SimpleEntry::getValue
            ));

        // 打印更新后的Map
        updatedMap.forEach((key, value) -> System.out.println(key + ": " + value));
    }
}

在这个例子中:

  1. 我们首先创建了一个HashMap,其中包含了一些水果的名称和对应的数量。
  2. 使用entrySet()方法获取Map的条目集合并转换为流。
  3. 接着,我们调用map方法,并传递一个lambda表达式,该表达式将每个条目的键变成原来的字符串加上"*%¥#@",并将值在原来的基础上加100。这里我们使用了AbstractMap.SimpleEntry来创建新的键值对。
  4. 使用collect方法将流收集回一个新的Map对象,通过Collectors.toMap指定如何从每个SimpleEntry中获取新的键和值。
  5. 最后,我们使用forEach方法遍历新的Map,并打印出每个键值对。

输出结果将是:

复制

复制代码
Apple*%¥#@: 101
Banana*%¥#@: 102
Cherry*%¥#@: 103

每个键都变成了原来的字符串加上"*%¥#@",每个值都是原Map中对应值的基础上加100。这个例子展示了如何使用Map的stream流和map方法来转换Map中的键和值。

终结流取最大值

stream的收集

右端改一下tolist/set,左端可以i用list接------可重复,也可用set接------无重复

收集到数组 收集到map

default

这里的default是什么

在这张图片中,"default" 是一个修饰符,用于标识接口中的默认方法。在 Java 8 及更高版本中,接口可以包含具有实现的方法,这些方法被称为默认方法。默认方法的定义方式是在方法声明前加上 "default" 关键字。

在这个特定的例子中,stream() 方法是一个默认方法,它是 Collection 接口的一部分。这意味着任何实现了 Collection 接口的类都可以直接使用这个方法,而无需自己实现它。stream() 方法的目的是返回当前集合对象的 Stream 流,使得可以对集合进行流操作。

总结来说,这里的"default" 表示 stream() 方法是一个默认方法,提供了对集合创建 Stream 的功能,而不需要在每个实现 Collection 接口的类中手动实现该方法。

可变参数 类型。。。values

collections

斗地主

相关推荐
程序员酥皮蛋7 分钟前
hot 100 第四十题 40.二叉树的层序遍历
数据结构·算法·leetcode
※DX3906※33 分钟前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
Chan162 小时前
LeetCode 热题 100 | 矩阵
java·开发语言·数据结构·算法·spring·java-ee·intellij-idea
im_AMBER2 小时前
Leetcode 136 最小栈 | 逆波兰表达式求值
数据结构·学习·算法·leetcode·
识君啊3 小时前
Java字符串算法核心攻略
java·数据结构·算法·leetcode·字符串·
郝学胜-神的一滴3 小时前
力扣86题分隔链表:双链表拆解合并法详解
开发语言·数据结构·算法·leetcode·链表·职场和发展
gihigo19983 小时前
SSA奇异谱分解:时频域信号成分分析与重构
数据结构·算法·重构
程序员阿鹏3 小时前
73.矩阵置零
数据结构·算法·矩阵
一叶落4383 小时前
LeetCode 191. 位1的个数(Hamming Weight)——三种解法详解(C语言)
c语言·数据结构·算法·leetcode
仰泳的熊猫3 小时前
题目1882:蓝桥杯2017年第八届真题-k倍区间
数据结构·c++·算法·蓝桥杯