如何在 Java 8 中组合不同的流

2024-04-21

我有一个Set<DateCount>我使用以下代码创建的。这将创建一组 7 个DateCount初始计数为 0 的对象,从当天开始,本周的每一天都有一个对象。

// Create an initial Set of DateCount objects for the current week with counts of 0
Set<DateCount> dateCounts = IntStream.range(0, DAYS_IN_WEEK)
        .mapToObj(idx -> new DateTime().withTimeAtStartOfDay().plusDays(idx))
        .map(dt -> new DateCount(dt.toDate(), 0L))
        .collect(toSet());

我有一个List<Object[]>这是从数据库存储库返回的。每个Object[]列表中有一个BigDecimal在索引 0 和 a 处Long在索引 1 处。BigDecimal实际上是一个日期,比如20141001。我想知道是否有办法可以更新dateCounts以 Stream 方式使用此数据进行设置。现在,我正在执行以下操作,它只是迭代对象数组列表并创建新的DateCount然后将对象添加到dateCounts放。这DateCount班级有一个习惯equals() and hashCode()方法来确保dateCounts集合仅包含一个DateCount任何给定日期的实例。

data.stream()
        .forEach(obj -> {
            DateTime date = null;
            try {
                date = (sdf == null) ? new DateTime(obj[0]) : new DateTime(sdf.parse(obj[0].toString()));
                dateCounts.add(new DateCount(date.toDate(), (Long) obj[1]));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        });

顺便说一句,我想知道是否还有一种方法可以避免在 lambda 表达式中仅用于解析String to a Date.

Update——这是我目前想到的。尽管流式传输似乎并不自然List<Object[]>在 .map 调用中,不确定是否有更好的方法。我介绍了我自己的Tuple<X, Y>类,因为与Object[]由于没有访问器方法,在流中工作得不太好。同样在最后两行中,我正在创建一个TreeSet with a Comparator这样我就可以按日期对数据进行排序。我不认为这是最好的方法,但我尝试打电话sorted()并制作DateCount实施Comparable这似乎工作正常,但一旦collect(toSet())调用方法后,排序就会消失。我认为这就是流式通话的本质。我很好奇是否有一种方法可以在调用收集方法之前对其进行排序并在调用收集之后保留排序。

Set<DateCount> dateCounts = IntStream.range(0, DAYS_IN_WEEK)
        .mapToObj(idx -> new Tuple<>(new DateTime().withTimeAtStartOfDay().plusDays(idx).toDate(), 0L))
        .map(t -> {
            Tuple<String, Long> d = data.stream()
                    .map(arr -> new Tuple<>(arr[0].toString(), (Long) arr[1]))
                    .filter(tuple -> sdf.format(t.getX()).equals(tuple.getX()))
                    .findFirst().orElse(new Tuple<>(sdf.format(t.getX()), 0L));

            return new DateCount(DateTime.parse(d.getX(), DateTimeFormat.forPattern("yyyyMMdd")).toDate(), d.getY());
        })
        .collect(toSet());

TreeSet<DateCount> set = new TreeSet<>((a, b) -> a.compareTo(b));
set.addAll(dateCounts);

您可以提供一个Supplier为了收藏。只需更换

.collect(toSet());

with

.collect(toCollection(() -> new TreeSet<>((a, b) -> a.compareTo(b))));

但请注意,指定(a, b) -> a.compareTo(b)为了Comparator暗示自然排序。如果你的元素实现Comparable,没有必要提供这样的比较器。你可以简单地使用

.collect(toCollection(TreeSet::new));

If DateCount has a compareTo方法但没有实现Comparator你还可以指定DateCount::compareTo而不是(a, b) -> a.compareTo(b).


请注意,在您的第一个mapToObj操作时无需包装DateTime in a Tuple。您可以简单地映射到DateTime并在下一个中使用该值map操作(据我所知仅t.getX()在那里,第二个值是0L根本没有使用)。


毕竟,我不确定你想要实现什么,但我有强烈的感觉,你可能会看看Collectors.groupingBy http://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-java.util.function.Supplier-java.util.stream.Collector-

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 8 中组合不同的流 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何使用 LAMBDA 表达式在 LINQ 中执行 IN 或 CONTAINS?

    我有以下 Transact Sql 我正在尝试将其转换为 LINQ 并且很挣扎 SELECT FROM Project WHERE Project ProjectId IN SELECT ProjectId FROM ProjectMemb
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 打开弹出窗口时 Chrome 扩展程序损坏 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 Chrome 扩展程序在尝试打开时崩溃popup https developer chrome com extensio
  • 如何使用 Warp 检查授权标头?

    我正在使用 Rust 和 Warp 构建 graphql api 我已经浏览了文档 但我仍然不知道如何链接过滤器 特别是检查authorization在请求头中 let context extractor warp any this cod
  • 通过 React Router 传递函数

    我想通过 React Router 将函数传递给子组件 我尝试了以下方法 但似乎不起作用 class App extends Component constructor props super props render return div
  • C++ 中的迭代合并排序

    我目前正在研究合并排序的迭代版本 但遇到了问题 当数组的特定大小如 34 35 36 或 100 仅几个示例 时 程序会崩溃 而它适用于其余数组 fe 适用于 2 的幂 我已经运行了一些测试并对其进行了调试 问题似乎出在我的迭代 合并排序的
  • PHP preg_functions 多字节安全吗?

    PHP 中没有可用的多字节 preg 函数 那么这是否意味着默认的 preg functions 都是 mb 安全的 在 php 文档中找不到任何提及 pcre 支持开箱即用的 utf8 请参阅 u 修饰符的文档 插图 xC3 xA4 是德
  • 下拉按钮/微调器类似于 Google 设计规范中的按钮

    我想知道如何制作一个下拉按钮 菜单 就像我们在 Google 的设计规范和下图中看到的那样 因此列表在按钮下方展开 我是否需要为其设置自定义布局而不是R layout support simple spinner dropdown item
  • 更改列表中每个字典的特定键的值 - python

    我有一个字典列表 如下所示 type df first from 2020 02 01T20 00 00 000Z to 2020 02 03T20 00 00 000Z days 0 coef 0 1 0 1 0 1 0 1 0 1 0
  • 匹配不同长度的时间向量:一个棘手的问题

    我有两组来自不同机器的测量结果 它们是随着时间的推移以略有不同的间隔进行测量的 例如一个每 5 分钟测量一次 而另一个每 3 分钟测量一次 优点是每 5 分钟计算一次 作为整个时间间隔的平均值 因此这些值应该大致对应 我想通过每 5 分钟
  • 返回 zip 以从 django 中的视图下载

    我尝试在 Django 应用程序中下载 zip 文件 我应该如何从视图中返回它 我尝试了下面的代码 但我在浏览器中收到了某种警报 其中包含我的 zip 中的文件内容 我究竟做错了什么 def download logs request da
  • 寻找优秀、可靠玩家的算法

    我有以下玩家 每个值对应于给定游戏中正确答案百分比的结果 players array A gt array 0 0 0 0 B gt array 50 50 0 0 C gt array 50 50 50 50 D gt array 75
  • 从另一个 Jenkinsfile 调用远程 jenkins 文件

    我正在我的组织中设计 Jenkins CICD 管道 我有以下问题 我来自一个 DevOps 团队 负责控制多个开发团队的 Jenkins 管道 我基本上想编写一个具有多个阶段的 Jenkins 文件 可以由多个团队运行 据我所知 这个 J
  • 两个列表中的公共元素

    我有两个ArrayList每个对象都有三个整数 我想找到一种方法来返回两个列表的共同元素 有人知道我该如何实现这一目标吗 Use Collection retainAll https docs oracle com en java java
  • 如何查找正在执行的 AppleScript 的文件名

    如何找到正在执行的 AppleScript 的名称 原因 我想创建一个根据文件名更改其行为的脚本 就像是 if myname is Joe then ACTION1 else if myname is Frank then ACTION2
  • Python 的 re 模块 - 保存状态?

    我发现 Python 中最大的烦恼之一是无法re模块来保存其状态 而无需在匹配对象中显式执行此操作 通常 人们需要解析行 如果它们符合某个正则表达式 则通过相同的正则表达式从中取出值 我想写这样的代码 if re match foo w b
  • Google Chrome 警告:密码表单应包含(可选隐藏)用户名字段以方便访问

    当访问我的单页应用程序的 重置密码 路径并查看 Chrome 浏览器控制台时 我收到以下警告 DOM 密码表单应具有 可选择隐藏 用户名字段以方便访问 更多信息 goo gl 9p2vKq
  • 如何解决 Yelp API 调用中的 CORS 错误?

    我尝试使用 AJAX 调用 Yelp Fusion API 但出现以下错误 有人可以帮我弄清楚这里发生了什么事吗 api yelp com v3 1 加载资源失败 服务器响应状态为 403 index html 1 从源 null 访问 h
  • 我应该使用哪些 gdb 命令来缩小标签“main”中出现分段错误的位置?

    这是我的汇编代码和我的主要子例程 这是我的宏和常量 text fmt string x t t ln x n sfmt string 10lf t 10lf n error string Error filename string inpu
  • 同一 IP 443 端口中的多个域

    我在 IIS 7 的端口 443 https 上托管了一个网站 www example1 com 现在我为同一 IP 的 www example2 com 购买了一个新域 我想在此域中托管另一个网站 www example2 com htt
  • Jquery 获取具有特定类的第 n 个子级

    我有一个 html 表如下 table tr td class take 1 td td 2 td td 3 td td class take 4 td td 5 td td class take 6 td tr tr td class t
  • 如何在 Java 8 中组合不同的流

    我有一个Set