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

斗地主

相关推荐
七灵微34 分钟前
数据结构实验习题
数据结构
杰克尼11 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表
xiaolang_8616_wjl12 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
hqxstudying13 小时前
Java创建型模式---单例模式
java·数据结构·设计模式·代码规范
sun00770013 小时前
数据结构——栈的讲解(超详细)
数据结构
ゞ 正在缓冲99%…17 小时前
leetcode918.环形子数组的最大和
数据结构·算法·leetcode·动态规划
努力写代码的熊大19 小时前
单链表和双向链表
数据结构·链表
Orlando cron20 小时前
数据结构入门:链表
数据结构·算法·链表
许愿与你永世安宁1 天前
力扣343 整数拆分
数据结构·算法·leetcode
Heartoxx1 天前
c语言-指针(数组)练习2
c语言·数据结构·算法