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

斗地主

相关推荐
我不会编程55511 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
owde12 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头12 小时前
分享宝藏之List转Markdown
数据结构·list
蒙奇D索大13 小时前
【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
c语言·数据结构·考研·改行学it
A旧城以西13 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
烂蜻蜓14 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
守正出琦14 小时前
日期类的实现
数据结构·c++·算法
ゞ 正在缓冲99%…15 小时前
leetcode75.颜色分类
java·数据结构·算法·排序
爱爬山的老虎16 小时前
【面试经典150题】LeetCode121·买卖股票最佳时机
数据结构·算法·leetcode·面试·职场和发展
SweetCode17 小时前
裴蜀定理:整数解的奥秘
数据结构·python·线性代数·算法·机器学习