java流式传输对象_使用Java 8在地图上流式传输

java流式传输对象

映射流小 在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传输而不会过早收集结果。

Java 8最大的功能之一就是能够流式处理对象集合。 通过将.stream()方法添加到Collection接口中,使用此新功能突然扩展了Java语言中的每个集合。 其他数据结构(例如Map-interface)由于不是严格意义上的集合,因此未实现该方法。

MapStream将使用两个类型参数,一个键和一个值。 通过指定Map.Entry <K,V>作为类型参数,它还将扩展标准Stream接口。 这将允许我们直接从任何Java映射构造MapStream。

public interface MapStream<K, V> extends Stream<Map.Entry<K, V>> {...
}

多态性的概念告诉我们,只要新的返回类型是旧的返回类型的更具体的实现,子组件可能会更改覆盖方法的返回类型。 我们将在定义MapStream接口时使用它,以便对于每个链接操作,都返回一个MapStream而不是Stream。

public interface MapStream<K, V> extends Stream<Map.Entry<K, V>> {@Override MapStream<K, V> filter(Predicate<? super Map.Entry<K, V>> predicate);@Override MapStream<K, V> distinct();@OverrideMapStream<K, V> sorted(Comparator<? super Map.Entry<K, V>> comparator);...
}

某些操作仍将需要返回普通Stream。 如果操作更改了流元素的类型,我们将无法确保新类型将是Map.Entry。 但是,我们可以添加其他方法以在具有键-值对的类型之间进行映射。

@Override<R> Stream<R> map(Function<? super Map.Entry<K, V>, ? extends R> mapper);<R> Stream<R> map(BiFunction<? super K, ? super V, ? extends R> mapper);

除了可以使用户从条目映射到其他功能的功能外,他(她)还可以从键值对映射到其他功能。 当然,这很方便,但是由于我们正在使用值对,因此我们还可以添加更多特定的映射操作。

<R> MapStream<R, V> mapKey(BiFunction<? super K, ? super V, ? extends R> mapper);<R> MapStream<K, R> mapValue(BiFunction<? super K, ? super V, ? extends R> mapper);

看起来差别不大,但是使用API​​时,差别显而易见:

// With MapsStream
final Map<String, List<Long>> map = ...;
MapStream.of(map).mapKey((k, v) -> k + " (" + v.size() + ")").flatMapValue((k, v) -> v.stream()).map((k, v) -> k + " >> " + v).collect(System.out::println);// Without MapStream
final Map<String, List<Long>> map = ...;
map.entrySet().stream().map(e -> new AbstractMap.SimpleEntry<>(e.getKey() + " (" + e.getValue().size() + ")"),e.getValue())).flatMap(e -> e.getValue().stream().map(v -> new AbstractMap.SimpleEntry<>(e.getKey(), v))).map(e -> e.getKey() + " >> " + e.getValue()).collect(System.out::println);
  • 可以在此处找到 MapStream的完整实现。 如果您对更酷的东西感兴趣,请查看Speedment Github页面 。 玩得开心!

翻译自: https://www.javacodegeeks.com/2016/02/streaming-maps-java-8.html

java流式传输对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机学术硕士课题,硕士学术论文选题的原则分析

硕士学术论文选题的原则分析选题作为硕士学术论文写作过程的第一步&#xff0c;也是最关键的一步&#xff0c;直接影响到论文写作整个过程中&#xff0c;包括资料收集&#xff0c;发现问题&#xff0c;解决问题等一系列工作&#xff0c;决定了整篇论文的成败。硕士学术论文是对…

选择排序与冒泡排序的区别

冒泡排序&#xff1a;冒泡排序&#xff08;BubbleSort&#xff09;的基本概念是&#xff1a;依次比较相邻的两个数&#xff0c;将小数放在前面&#xff0c;大数放在后面。即在第一趟&#xff1a;首先比较第1个和第2个数&#xff0c;将小数放前&#xff0c;大数 放后。然后比较第…

冒泡排序 自带时间复杂度测试

#include<iostream> #include<time.h> using namespace std;void Sort(int List[], int n);int main() {int a[10000];int k, j;// 设置种子srand((unsigned)time(NULL));/* 生成 10 个随机数 */for (k 0; k < 10000; k){// 生成实际的随机数j rand();a[k] j…

独占线程太多怎么办_电脑内存被占用太多怎么办?

1、禁用闲置的IDE通道右键点击“我的电脑-属性”&#xff0c;然后点击“硬件”接着点击“设备管理器”&#xff0c;在其中打开“IDE ATA/PATA控制器”然后分别进入主要和次要IDE通道&#xff0c;选择“高级设置”&#xff0c;在这里找到“当前传送模式”为“不适用”的一项&…

计算机net use命令使用,网络命令net之net use应用

echo offnet use LPT1: "123456" /user:pingpai /persistent:no以上为批处理文件 "打印.bat"脚本。先介绍net use命令&#xff0c;最后看这个脚本是什么意思。以下内容来自net help use的结果。C:\Documents and Settings\ppb>net help use此命令的语…

记录日志的测试软件_教程:测试期间的日志记录

记录日志的测试软件日志记录是一种流行的解决方案&#xff0c;用于显示软件在运行时的运行状况。 但是&#xff0c;当我们使用jUnit / TestNG对应用程序进行单元测试时&#xff0c;日志记录会怎样&#xff1f; 在自动化测试执行期间&#xff0c;我们通常不希望看到日志记录消…

选择排序 自带时间复杂度分析

从当前未排序的整数中找到最小的整数&#xff0c;将它放在已排序的整数列表的最后。 #include<iostream> #include<time.h> using namespace std;void Sort(int List[], int n);int main() {int a[10000];int k, j;// 设置种子srand((unsigned)time(NULL));/* 生成…

oracle11g支持xp吗_拔掉U盘前一定需要安全弹出吗?

相信每一个使用过U盘的人&#xff0c;都经历过不安全弹出USB设备就直接拔掉&#xff0c;然后被电脑无情提示没有正确弹出USB设备的状况。拔掉U盘前点击安全弹出&#xff0c;已经成了一种默认的操作。那么&#xff0c;问题来了&#xff0c;拔掉U盘前真的需要安全弹出吗&#xff…

yili邮箱服务器配置,手把手教 个人SMTP服务器的配置 -电脑资料

导读&#xff1a;&#xff0c;因此我们要手工添加&#xff0c;管理员身份登录Windows Server 2003 系统。依次进入“控制面板→添加或删除程序→添加/删除Windows组件”&#xff0c;在弹出的“Windows组件向导”对话框中选中“电子邮件服务”选项&#xff0c;点击“详细信息”按…

java中使用kotlin_在Kotlin中使用libGDX

java中使用kotlin最近&#xff0c;我一直在阅读有关不同语言的信息&#xff0c;以及它们可以为已经拥挤的软件开发人员带来什么&#xff0c;并且一种语言对我来说很突出&#xff1a;Kotlin。 &#xff08; https://kotlinlang.org/ &#xff09; 这是一种相对较新的语言&#…

单链表的各种操作

#include<iostream> #define _CRT_SECURE_NO_WARNINGS using namespace std; typedef int DATA;struct SNode //定义节点 {DATA data;SNode* pNext; }; class CList //创建一个链表类 {SNode* m_hHead; //链表初始化char m_name[20];public:CL…

linux双显卡配置_Linux系统怎么配置双显卡?

感谢脚本之家网友鸢一雨音 的投稿众所周知&#xff0c;自从高性能独立图形处理器出现之后&#xff0c;很多便携式计算机就会采取一种双显卡的设计&#xff1a;节能的核心图形处理器用于渲染常规的桌面环境&#xff0c;而高性能的独立图形处理器则负责渲染高需求的应用程序。这种…

同时防服务器维修,加强服务器日常运维,避免宕机灾难发生

原标题&#xff1a;加强服务器日常运维&#xff0c;避免宕机灾难发生服务器作为我们日常网络的支撑&#xff0c;可以说是24小时的全天候运转。在这种无休止的“加班”的状态下&#xff0c;服务器必然容易出问题&#xff0c;一旦发生服务器宕机就会造成整个网络的瘫痪&#xff0…

java动态代理_Java动态代理

java动态代理代理是一种设计模式。 当我们想添加或修改现有类的某些功能时&#xff0c;我们创建并使用代理对象。 使用代理对象而不是原始对象。 通常&#xff0c;代理对象具有与原始对象相同的方法&#xff0c;并且在Java代理类中&#xff0c;通常会extend原始类。 代理具有原…

建立能持续处理请求的Server端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

basemap安装_【我是解决安装问题系列_1】Mac python basemap安装

「2020/3/21更新」 附basemap网盘下载地址⏬Python需要跳过的安装的坑太太太太多了!!!!!最近看《利用python进行数据分析》这本书&#xff0c;到可视化的部分&#xff0c;看着最后的例子地图挺酷炫的&#xff0c;跟着敲代码的过程中&#xff0c;发现有时候不是你不会写&#xf…

nfs服务器远程访问,NFS远程共享存储

原标题&#xff1a;NFS远程共享存储构建储NFS远程共享存因为NFS有很多功能&#xff0c;不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息&#xff0c;这样就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。那RPC和NFS之间又是如何之间相互通…

chameleon 算法_使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试...

chameleon 算法从我以前的帖子继续在这里 &#xff0c;我想我已经了解了Java EE和也的Arquillian&#xff0c;并测试了一些新的&#xff08;和令人兴奋的&#xff09;事&#xff0c;我想与大家分享。 但是&#xff0c;在开始之前&#xff0c;我想首先请您注意以下几点&#xf…

建立能持续处理请求的Client端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

comparator 字符串比较大小_Java8 - 使用 Comparator.comparing 进行比较排序

使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序。Comparator接口同样也是一个函数式接口,我们可以把使用lambda表达式。如下示例, package com.common; import java.util.*; import java.u…