将 HashMap 内容写入文件

2024-03-30

我有一个HashMap<Integer, Integer>。我将其内容写入文件,因此它的每一行都包含hashmapKey:::hashmapValue。我现在就是这样做的:

List<String> mLines = new ArrayList<String>();
mHashMap.forEach((key, value) -> mLines.add(key + DATA_SEPARATOR + value));
Files.write(mOutputPath, mLines, StandardCharsets.UTF_8);

我非常怀疑我是否需要复制整个HashMap对于字符串列表,我确信在处理大量数据时它会给我带来性能问题。我的问题是:我该如何写HashMap使用 Java 8 将内容写入文件以避免复制另一个列表中的值?


最简单、非复制、最“流”的解决方案是

Files.write(mOutputPath, () -> mHashMap.entrySet().stream()
    .<CharSequence>map(e -> e.getKey() + DATA_SEPARATOR + e.getValue())
    .iterator());

虽然 Stream 没有实现Iterable,执行 Stream 操作并以调用结束的 lambda 表达式iterator()就流,可以。它将履行合同,因为 lambda 表达式将与 Stream 不同,生成一个新的Iterator在每次调用时。

请注意,我删除了显式的UTF-8字符集说明符为java.nio.Files将使用UTF-8当没有指定字符集时(与旧的 io 类不同)。

上述解决方案的巧妙之处在于,I/O 操作包装了 Stream 处理,因此在 Stream 内部,我们不必处理已检查的异常。相比之下,Writer+forEach解决方案需要处理IOExceptions as a BiConsumer不允许抛出检查异常。因此,使用的工作解决方案forEach看起来像:

try(Writer writer = Files.newBufferedWriter(mOutputPath)) {
    mHashMap.forEach((key, value) -> {
        try { writer.write(key + DATA_SEPARATOR + value + System.lineSeparator()); }
        catch (IOException ex) { throw new UncheckedIOException(ex); }
    });
} catch(UncheckedIOException ex) { throw ex.getCause(); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HashMap 内容写入文件 的相关文章

随机推荐

  • 使用未分配的变量?

    当声明 paymentstatus 为空或在 if 语句中具有值时 我收到错误使用未分配的变量 ps 我想我已经声明了 ps 但显然我做错了什么 为什么编译器会抱怨这个 这是上下文中的错误 public IList
  • 如何求最大生成树?

    与克鲁斯卡尔最小生成树算法相反的算法是否适用 我的意思是 每一步选择最大权重 边缘 还有其他找到最大生成树的想法吗 是的 它确实 计算网络 G 的最大权生成树的一种方法 由于克鲁斯卡尔 可以总结如下 按权重将 G 的边按降序排序 令 T 为
  • Netbeans 告诉我删除 null 比较,但这会破坏我的代码

    我有以下简单的代码来模拟猫狩猎 import java util Arrays import java util LinkedList public class HuntigSaeson int hunger 4 int level 3 L
  • setInterval 似乎不起作用?

    这段代码似乎不起作用 我正在尝试创建一个可用聊天室的动态列表 每 10 秒更新一次 我还希望用户能够设置参数来过滤要显示的房间 我正在使用这段代码 但由于某种原因它似乎不起作用
  • 无法查看 Service Worker 日志

    看不到我的 Service Worker 的日志 以下是我尝试打开已注册和正在运行的服务工作人员日志的步骤 Open chrome serviceworker internals 单击开始并检查 刷新检查窗口 等待日志出现 但是 两者chr
  • 在 coreos 上启动 calicoctl 容器

    我有 CoreOS 测试版 1153 4 0 我正在尝试运行 calicoctl 来检查我的 calico 网络是否配置正确 所以我尝试使用以下命令运行 calicoctl rkt 容器rkt run quay io calico ctl我
  • Rails ActiveRecord:如何在 jsonb 上使用带双引号的绑定变量

    我有一个 postgres jsonb 查询如下 Blog where upload data gt name name 它可以工作 但会破坏构建 因为优秀的刹车员指出了可能的 SQL 注入风险 如果我使用绑定变量 Blog where u
  • 类型转换为 Dalvik 格式失败:无法执行 dex:包装器未首先正确加载

    当我在 Eclipse 中使用 Android SDK 和 AVD Manager 时 我遇到过各种奇怪的错误 就像标题中的错误一样 一般来说 我只是拔掉手机插头 然后重新插入 或者关闭并重新打开 Eclipse 但这很令人沮丧 显然Con
  • 浏览器不遵循 AJAX 响应的重定向(PHP 生成的响应使用 CAS 身份验证)

    好吧 看来我最初的问题犯了一个错误 因此 这里有一些更正 答案仍然适用 因为当协议更改为 HTTPS SSL 时 第二个重定向就会停止 就我而言 重定向发生了多次 并且浏览器不遵循第二次重定向 遵循第一个重定向 但返回错误 我一直读到包含重
  • 对于时间序列图,如何将 x 轴设置为没有周末的日历时间

    我想绘制一个时间序列 外汇期货合约的定价数据 时间给出yyyymmdd HH MM SS字符串格式 价格在double 该时间序列跨越一周多 但是 数据点的时间戳始终是工作日 是否有内置方法可以显示适当的 x 轴标签和缩放比例但没有周末 我
  • 此时无法启动异步操作

    我正在使用以下代码行调用异步操作 Task Run gt emailService SendEmail email Wait public async Task
  • Powershell - 将字符串输出为 CSV 并格式化

    我在下面给出了一个简单的例子 有谁知道我必须做什么才能将字符串输出到两列中 我的搜索在将输出格式化为 CSV 方面没有得到太多结果 请指出我正确的方向 LogFile c somefile csv Hello World Out File
  • 为什么我不能在淘汰赛中将数据连接到可观察数组

    我正在尝试将服务器中的元素添加到淘汰赛中的可观察数组中 这是我的视图模型 function ArticlesViewModel var self this this listOfReports ko observableArray self
  • jQuery:选择不为空的数据属性?

    我正在尝试选择所有具有data go to不为空的属性 我试过了 data go to 但奇怪的是 如果我这样做 它似乎会选择页面上的每个元素 Just as further reference and an up to date may
  • 直方图 ggplot:显示每个类别的每个 bin 的计数标签

    我将使用 ggplot 中的钻石数据集来说明我的观点 我想绘制价格直方图 但我想显示每次切割的每个箱的计数 这是我的代码 ggplot aes x price data diamonds df geom histogram aes fill
  • 我可以在 jQuery 中为每个动画步骤实现回调吗?

    我想在我的网站中实现一个动画 需要更新多个 DOM 元素 每个 DOM 元素都有自己的动画路径 取决于它们的位置 并且仍然有缓和的效果 如果我为每个元素调用 jQuery 的 animate 函数 队列 false 它将使每个元素与其余元素
  • UIAlertController (ActionSheet) - 无法同时满足约束[重复]

    这个问题在这里已经有答案了 每次在模拟手机中显示 UIAlertController 操作表时 我都会收到此警告 代码没什么花哨的 let action1 UIAlertAction title Action 1 style default
  • 批量替换XCode中的版权注释

    我已经在 iOS 项目上工作了一段时间 创建了数百个源文件 现在一切都完成了 我意识到一些悲伤的事情 我在开始工作之前编辑了版权文件模板 并且我的所有文件都已这种蹩脚的格式 MyClass h Created by Redwarp on 3
  • SwiftUI:如何迭代可绑定对象的数组?

    我正在尝试学习 SwiftUI 以及绑定的工作原理 我有这段有效的代码 它显示了项目列表 当点击一个项目时 对该项目的绑定将传递到子视图 struct ProjectsView View ObjectBinding var state Ap
  • 将 HashMap 内容写入文件

    我有一个HashMap