迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中将 Stream 元素转换为映射

作者:迹忆客 最近更新:2023/11/13 浏览次数:

我们将讨论 Java Streams 的实际用途以及如何将流元素转换为映射元素。

要理解本文,你必须对 Java 8 有基本的了解,尤其是 lambda 表达式和 Stream API。但是,如果你是新手,请不要担心;我们将解释一切。


Java 中要映射的字符串流

你一定想知道字符串本质上是一个元素列表,而不是键或值的列表,不是吗?要将字符串流转换为映射,你必须了解以下方法的基础知识。

  1. Collectors.toMap() - 它执行不同的功能归约操作,例如将元素收集到集合中。
  2. toMap - 它返回一个 Collector,它将元素收集到一个带有键和值的 Map 中。
Map<String, String> GMS = stream.collect(Collectors.toMap(k -> k[0], k -> k[1]));

知道了?我们将指定适当的映射函数来定义如何从流元素中检索键和值。

Example1.java 的实现:

package delftstackStreamToMapJava;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Example1 {
  // Method to get stream of `String[]`
  private static Stream<String[]> MapStringsStream() {
    return Stream.of(new String[][] {{"Sky", "Earth"}, {"Fire", "Water"}, {"White", "Black"},
        {"Ocean", "Deep"}, {"Life", "Death"}, {"Love", "Fear"}});
  }
  // Program to convert the stream to a map in Java 8 and above
  public static void main(String[] args) {
    // get a stream of `String[]`
    Stream<String[]> stream = MapStringsStream();

    // construct a new map from the stream
    Map<String, String> GMS = stream.collect(Collectors.toMap(k -> k[0], k -> k[1]));

    System.out.println(GMS);
  }
}

输出:

{Sky=Earth, White=Black, Love=Fear, Fire=Water, Life=Death, Ocean=Deep}

从 Java 中的 Stream 对象创建 Map

该程序是使用 Collectors.toMap() 方法的另一个简单演示。

此外,它还使用[引用函数/lambda 表达式]。因此,我们建议你检查几分钟。

另外,如果你以前没有使用过 [Function.identity()],请阅读它。

  1. 查看我们的三个流:

    ``java
    List L1 = Arrays.asList(1.1,2.3)。
    List L2 = Arrays.asList(“A”, “B”, “C”);
    List L3 = Arrays.asList(10,20,30);

    
    我们将三个数组列表定义为具有不同数据类型的流。
    
  1. 为我们的主要映射方法添加更多内容:
    2.1 从 Stream 对象生成 Map 需要一个键和值映射器。
    2.2 在这种情况下,Stream 是我们的数组列表,然后将其传递给 Collectors 进行归约,同时借助 .toMap 映射到键中。

    Map<Double, Object> printL1 = L1.stream()
    				.collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1));
    		System.out.println("Stream of Double to Map: " + printL1);
    

Example2.java 的实现:

package delftstackStreamToMapJava;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Example2 {
  public static void main(String[] args) {
    // Stream of Integers
    List<Double> L1 = Arrays.asList(1.1, 2.3);
    List<String> L2 = Arrays.asList("A", "B", "C");
    List<Integer> L3 = Arrays.asList(10, 20, 30);
    Map<Double, Object> printL1 =
        L1.stream().collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1));
    System.out.println("Stream of Double to Map: " + printL1);

    Map<String, Object> printL2 =
        L2.stream().collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1));
    System.out.println("Stream of String to Map: " + printL2);

    Map<Integer, Object> printL3 =
        L3.stream().collect(Collectors.toMap(Function.identity(), String::valueOf, (k1, k2) -> k1));
    System.out.println("Stream of Integers to Map: " + printL3);
  }
}

输出:

Stream of Double to Map: {2.3=2.3, 1.1=1.1}
Stream of String to Map: {A=A, B=B, C=C}
Stream of Integers to Map: {20=20, 10=10, 30=30}

在 Java 中将 Stream 转换为 Map 时确定值的长度

以下代码块将字符串转换为 Map,其中键表示字符串值,值表示每个单词的长度。这是我们的最后一个示例,尽管这属于映射基本示例的基本流的类别。

解释:

Collectors.toMap 收集器接受两个 lambda 函数作为参数。

  1. stream-> stream - 确定 Stream 值并将其作为映射的键返回。
  2. stream-> stream.length - 找到当前流值,找到它的长度并将其返回给给定键的映射。

Example3.java 的实现:

package delftstackStreamToMapJava;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public class Example3 {
  public static Map<String, Integer> toMap(String str) {
    Map<String, Integer> elementL =
        Arrays.stream(str.split("/"))
            .collect(Collectors.toMap(stream -> stream, stream -> stream.length()));

    return elementL;
  }

  public static void main(String[] args) {
    String stream = "We/Will/Convert/Stream/Elements/To/Map";

    System.out.println(toMap(stream));
  }
}

输出:

{Convert=7, Stream=6, Will=4, To=2, Elements=8, Map=3, We=2}

在 Java 中为唯一的产品键将流转换为映射

我们将转换整数流 pro_id 和字符串的 productname。不过,不要混淆!

这是流集合映射值的又一个实现。

它是顺序的,这里的键是唯一的 pro_id。整个程序除概念外与示例二相同。

这是使用流映射更现实的情况。它还将使你了解可以构建一个从数组对象中提取唯一值和键的自定义程序有多少种方法。

Products.java 的实现:

package delftstackStreamToMapJava;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Products {
  private Integer pro_id;
  private String productname;

  public Products(Integer pro_id, String productname) {
    this.pro_id = pro_id;
    this.productname = productname;
  }

  public Integer extractpro_id() {
    return pro_id;
  }

  public String getproductname() {
    return productname;
  }

  public String toString() {
    return "[productid = " + this.extractpro_id() + ", productname = " + this.getproductname()
        + "]";
  }

  public static void main(String args[]) {
    List<Products> listofproducts = Arrays.asList(new Products(1, "Lamda 2.0 "),
        new Products(2, "Gerrio 3A ultra"), new Products(3, "Maxia Pro"),
        new Products(4, "Lemna A32"), new Products(5, "Xoxo Pro"));

    Map<Integer, Products> map = listofproducts.stream().collect(
        Collectors.toMap(Products::extractpro_id, Function.identity()));
    map.forEach((key, value) -> { System.out.println(value); });
  }
}

输出:

[productid = 1, productname = Lamda 2.0 ]
[productid = 2, productname = Gerrio 3A ultra]
[productid = 3, productname = Maxia Pro]
[productid = 4, productname = Lemna A32]
[productid = 5, productname = Xoxo Pro]

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Java 中的 volatile 关键字

发布时间:2023/11/13 浏览次数:173 分类:Java

本文讨论了 Java 中的 volatile 关键字及其优缺点,并举例说明了如何使用。Java 是一种非常流行的编程语言,通过了解 Java,我们可以很容易地理解它为什么会在编程社区中获得这样的地位。

Java 中的 StringUtils

发布时间:2023/11/13 浏览次数:80 分类:Java

本文介绍 Java 中的 StringUtils 类是什么。本文介绍什么是 StringUtils 以及如何在 Java 中使用它来处理字符串。StringUtils 是一个用于处理 String 的类,它提供了比 Java String 类更多的实用方法。

Java 中的 flatMap

发布时间:2023/11/13 浏览次数:132 分类:Java

本文介绍 flatMap 以及如何在 Java 中使用它。本文介绍 flatMap 以及如何在 Java 中使用它。flatMap 是 Java 流中的一个操作/函数,用于在执行某些功能性任务后获取新流。在这里,我们将讨论 flatMap

修复 Java NoClassDefFoundError 错误

发布时间:2023/11/13 浏览次数:199 分类:Java

本文介绍如何修复 Java 中的 NoClassDefFoundError。在 Java 语言中,错误是主要由于缺乏资源而发生的异常。此外,错误无法在编译时捕获并在运行时发生。

在 Java 中扩展 Comparable

发布时间:2023/10/19 浏览次数:97 分类:Java

本教程展示了如何在 Java 中清除 StringBuilder 本指南将了解在 Java 中扩展 Comparable 接口。它写成 Comparable。它是一个由 Java 中的许多类实现的接口。

Java 中的 Predicate 是什么

发布时间:2023/10/19 浏览次数:109 分类:Java

本文介绍 Java 8 中的 Predicate 接口。本教程通过 Java 示例介绍 Predicate 接口。Predicate 是 Java 中的一个接口,用作 lambda 表达式或方法引用的目标赋值。

Java 输出参数

发布时间:2023/10/19 浏览次数:93 分类:Java

本教程演示了 Java 是否有类似 C# 的 out 参数关键字。Java 不支持像 C# 中的 out 和 ref 之类的关键字在方法中通过引用传递,因为值仅在 Java 中传递参数。该值甚至通过引用。

Java 中的 parameter 与 argument

发布时间:2023/10/19 浏览次数:84 分类:Java

本文介绍 Java 中 parameter 和 argument 的区别。本教程通过 Java 中的示例介绍 parameter 和 argument 之间的区别。

在 Java 中画一个圆

发布时间:2023/10/19 浏览次数:189 分类:Java

本教程介绍如何在 Java 中使用几个函数画圆在本文中,我们将介绍如何使用用于创建 GUI 组件的库 java.awt 和 javax.swing 在 Java 中绘制一个圆。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便