LinkedHashMap EntrySet 的顺序未保留在流中(Android)

2023-12-28

我正在为注册屏幕创建一个非常简单的表单验证实用程序,并且我遇到了一些关于以下方面的意外行为LinkedHashMap以及从其创建的流entrySet.

我将验证结果存储在LinkedHashMap,语句顺序如下:

Map<ValidationResult.SignUpField, Boolean> fieldStatuses = new LinkedHashMap<>();

fieldStatuses.put(EMAIL, isValidEmail(emailAddress));
fieldStatuses.put(USERNAME, isValidUsername(username));
fieldStatuses.put(BIRTHDAY, isValidBirthday(birthday));
fieldStatuses.put(PASSWORD, isValidPassword(password));
fieldStatuses.put(CONFIRM_PASSWORD, password.equals(confirmedPassword));

List<ValidationEntry> invalidFields = aggregateInvalidFields(fieldStatuses);

一次特定的迭代会导致除“确认密码”之外的所有上述字段均无效。对条目集使用简单的 for 循环并忽略有效结果,无效结果按以下顺序出现:

  • Email
  • Username
  • Birthday
  • Password

然后,我尝试利用 Android 上可用的 Stream API 子集(目标版本 25,最小值为 19,因此缺少Collectors.toMap()):

private static List<ValidationEntry> aggregateInvalidFields(Map<ValidationResult.SignUpField, Boolean> fields) {
    List<ValidationEntry> invalidFields = new ArrayList<>();
    fields.entrySet()
            .stream()
            .filter(entry -> !entry.getValue())
            .forEachOrdered(entry -> {
                ValidationResult.SignUpField field = entry.getKey();
                invalidFields.add(new ValidationEntry(field, lookUpErrorCode(field)));
            });
    return invalidFields;
}

但该代码产生以下顺序:

  • Birthday
  • Password
  • Username
  • Email

这里究竟发生了什么,为什么流的结果不遵守插入顺序LinkedHashMap?请注意,如果我换出forEachOrdered with forEach,它仍然没有插入顺序。


此行为是 Android 7.0 / 7.1 LinkedHashMap 实现中的一个已知错误。

LinkedHashMap 的集合视图的 spliteratorsentrySet, values and keySet正确地报告他们是ORDERED但实际上它们不是,因为内部使用了父类(HashMap)的 spliterator 实现。

这种行为已经有记录的 https://android.googlesource.com/platform/libcore/+/7ae7ae73754c8b82a2e396098e35553d404c69ef%5E%21/#F0Javadoc 中也提出了解决方法。

The fix https://android.googlesource.com/platform/libcore/+/9efb6d12ce4d2ffedb73d6e9887ea2c89f8ec129已于 2016-08-16 提交,并将出现在下一个 Android 版本中。

澄清一下:Google 于 2017 年 1 月首次意识到此错误,因此上述“修复”是一个意外修复。如果他们早点知道这个问题,该解决方案就会包含在 7.1 中

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

LinkedHashMap EntrySet 的顺序未保留在流中(Android) 的相关文章

  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所

随机推荐

  • openAi-gym 名称错误

    我正在尝试在 WSL 上使用 OpenAI 著名的 Gym 模块并在 python 3 5 2 上执行代码 当我尝试运行环境时正如这里所解释的 https gym openai com docs 使用代码 import gym env gy
  • 是什么导致了这个“关闭句柄延迟读取”错误?

    我刚刚从最新的源安装了 GHC 现在我的程序给了我一条关于 关闭句柄延迟读取 的错误消息 这是什么意思 基本的惰性 I O 原语 hGetContents 产生一个String惰性地 它只根据需要从句柄中读取 以生成程序实际需要的字符串部分
  • 使用 Jquery 过滤表行

    我发现一个 Jquery 脚本可以根据输入字段进行表过滤 该脚本基本上采用过滤器 分割每个单词并使用每个单词过滤表行 因此 最后您将得到一个包含输入字段中所有单词的行列表 http www marceble com 2010 02 simp
  • Boost Graph Library - 有向图的最小生成树

    我有一个问题 要求我在 Boost Graph Library 中找到有向图的最小生成树 我的第一次尝试是使用深度优先搜索和 DFS 访问者 我的计划是忽略除树边回调之外的所有边 这是行不通的 我用下面的例子来说明原因 我的问题是我是否可以
  • 在 Scala Spark 中加入不同 Dataframe 时动态选择多个列

    我有两个 Spark 数据框df1 and df2 有没有办法在连接这两个数据帧时动态选择输出列 以下定义在内部联接的情况下输出 df1 和 df2 中的所有列 def joinDF df1 DataFrame df2 DataFrame
  • Doctrine2...最佳补水模式?

    我正在设计一个房间预订系统 它有九个实体 它们都相互关联 在此特定实例中 我从实体中检索 10 30 行entry其中有 25 个属性 每个条目都有一个room其中有 10 个属性 我需要所有的条目信息以及entry gt room gt
  • 来自 Maven 的 Java OpenCV

    有没有办法从存储库获取 OpenCV 我应该添加到哪个工件pom xml 我找到的每个教程都是从 14 年开始的 似乎有些东西发生了变化 他们说它还没有出现在官方 Maven 存储库中 但我找到了条目
  • 创建使用 .NET 4.0 的应用程序池

    我使用以下代码创建应用程序池 var metabasePath string Format IIS 0 W3SVC AppPools serverName DirectoryEntry newpool DirectoryEntry appp
  • 上传到谷歌云存储时转换音频文件

    我有一个应用程序 用户可以在其中录制音频 然后相互 发送 我写的是 发送 因为实际上文件存储在服务器上 并且只是在收件人想要收听时提供给他们 我的问题是 我需要将录音 当前为 caf 重新格式化为 mp3 这样它们就会更小 这样我就可以用我
  • MySQL 的 C++ 连接器

    EDITED 我的问题是这篇文章底部的错误 这是我的附加包含目录 C Program Files boost C Program Files MySQL MySQL Connector C 1 1 3 include C Program F
  • 对未使用的变量使用占位符时出现 MatchError

    使用 Scala 2 13 x 我得到scala MatchError null当我对未使用的变量使用占位符时 scala gt object Test val Any null object Test scala gt Test scal
  • 如何在 Linux 中获取 .Net 文件的 AssemblyVersion

    有没有办法在不使用 mono 的情况下在 Linux 中获取 Net 可执行文件的 AssemblyVersion 我想要的是一个脚本或命令 可以让我在 Linux 机器上获取 AssemblyVersion 我试过 strings fil
  • 我的 NgRx 效果不起作用,没有任何反应

    我的 NgRx 效果有问题 该应用程序正确地添加到商店 不幸的是我的请求效果没有执行 即在启动添加新车时 将其添加到商店 仅此而已 问题是我的效果没有控制台日志 没有由于错误的网址而导致的 http 错误 什么也没有 我的应用程序代码 Re
  • Android textview 用作标签和值

    我想将两个文本视图分组为一个组并使用标签和值 android中是否有任何组件可以将两个textview分组 在android布局中如何实现呢 您可以使用
  • 节点拒绝应用样式,因为其 MIME 类型('text/html')不是受支持的样式表 MIME

    我要提供静态服务index html with main css使用此节点服务器 该serve js var express require express var cors require cors var app express var
  • RuntimeError:只能计算浮点类型的平均值。取而代之的是字节。对于平均值 += images_data.mean(2).sum(0)

    我有以下代码 Device configuration device torch device cuda 0 if torch cuda is available else cpu seed 42 np random seed seed t
  • 显示所有 jinja 对象属性

    有没有办法在 jinja 模板中显示给定对象的所有属性的名称 内容 功能 这将使调试未按预期运行的模板变得更加容易 我正在使用以下方式建立一个网站hyde框架 这会非常方便 因为我仍在学习 jinja 和 hyde 的复杂性 最初 我以为使
  • c 中的快速模 10

    我正在寻找一种快速的模 10 算法 因为我需要加速我的程序 该程序在循环中执行许多模运算 我已经结帐了这一页 http cc davelozinski com c sharp use the modulus operator or alte
  • 如何在Flutter中仅选择单选按钮的一组值?

    我正在使用 Flutter Dart SQLite 开发测验应用程序 在这里 我使用 RadioListTile 来实现单选按钮功能 我将文本值从数组传递到此StatefulWidget 这是我正在使用的代码 import package
  • LinkedHashMap EntrySet 的顺序未保留在流中(Android)

    我正在为注册屏幕创建一个非常简单的表单验证实用程序 并且我遇到了一些关于以下方面的意外行为LinkedHashMap以及从其创建的流entrySet 我将验证结果存储在LinkedHashMap 语句顺序如下 Map