序列化 Collat​​or 实例

2023-11-29

我正在尝试序列化InstitutionResultView类的一些对象,它基本上是包装器番石榴的 TreeMultimap:

import java.io.Serializable;
import java.text.Collator;
import java.util.Comparator;

import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.collect.Maps.EntryTransformer;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Ordering;
import com.google.common.collect.SortedSetMultimap;
import com.google.common.collect.TreeMultimap;

public class InstitutionResultView implements Serializable {
  private static final long serialVersionUID = -8110992296090587657L;

  private final SortedSetMultimap<String, Institution> nameToInstitutionsMapping = TreeMultimap.create(
      Ordering.from(StringComparators.AS_IS), // insertion order
      Ordering.natural() // <----- this works when serializing object
      // Ordering.from(Collator.getInstance()) // <----- when used instead previous line gives an exception when serializing
          .nullsFirst().onResultOf(StringInstitutionFunctions.BY_NAME) // sort by name
          .compound(
              Ordering.natural().nullsFirst().onResultOf(IntegerInstitutionFunctions.BY_ID) // sort by id
              ));

  public SortedSetMultimap<String, Institution> institutions() {
    return nameToInstitutionsMapping;
  }

  public void setInstitutions(final Multimap<String, Institution> institutions) {
    this.nameToInstitutionsMapping.clear();
    this.nameToInstitutionsMapping.putAll(institutions);
  }

  @Override
  public String toString() {
    return Objects.toStringHelper(this)
        .add("nameToInstitutionsMapping", Multimaps.transformEntries(nameToInstitutionsMapping, EntryTransformers.TO_NAME_WITH_CATEGORY))
        .toString();
  }

在序列化期间我遇到异常:

java.io.NotSerializedException:java.text.RuleBasedCollat​​or at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) 在

...

com.google.common.collect.TreeMultimap.writeObject(TreeMultimap.java:180)

...

I found 此错误来自 Sun 的错误数据库其中涵盖与我的情况非常相似的情况,但它没有指出任何解决方案。我尝试添加瞬态 Collat​​or 实例字段:

  private transient Collator collatorInstance = Collator.getInstance();

并将其用作Ordering.from(collatorInstance)但仍然不起作用。

如果有人能给我一些想法来解决这个问题,我会很高兴。


EDIT- 这对我有用(感谢@Puce 和他的回答):

  class CollatorWrapper implements Comparator<String>, Serializable {
    private static final long serialVersionUID = 1L;

    private transient Collator collatorInstance;

    public CollatorWrapper() {
      super();
      initCollatorInstance();
    }

    @Override
    public int compare(final String o1, final String o2) {
      return collatorInstance.compare(o1, o2);
    }

    private void initCollatorInstance() {
      collatorInstance = Collator.getInstance();
    }

    private void writeObject(final java.io.ObjectOutputStream out) throws IOException {
      out.defaultWriteObject();
    }

    private void readObject(final java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
      in.defaultReadObject();
      initCollatorInstance();
    }
  }

我想你也许可以写一个包装器,

  • 实现比较器
  • 实现 Serialzable(以及必要的方法,例如 readObject、writeObject)
  • 包装一个瞬态 Collat​​or
  • 记住区域设置(如果您需要的话)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化 Collat​​or 实例 的相关文章

  • JSF2.0 中的空白输入字段未设置为 NULL

    我有一个支持 bean 其中 fileld 为 Long Double Integer String 当我没有在输入字段中指定任何内容时 长整型 整数和双精度值将被视为零 而不是空 我正在使用 tomcat 来部署我的应用程序 有什么解决办
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • Java:Swing:设置JButton的位置

    我想实现以下布局 OK
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • 是否有任何理由使用 ZoneId.of("UTC") 而不是 ZoneOffset.UTC ?

    有什么理由使用ZoneId of UTC 代替ZoneOffset UTC 我们知道两者之间的区别 如ZoneOffset UTC 和 ZoneId of UTC 之间有什么区别 https stackoverflow com questi
  • 带嵌入式 tomcat 的 spring-boot 不会将请求分派到控制器

    我有一个使用 spring boot 和嵌入式 Tomcat 容器的应用程序 据我所知 我的代码与 spring boot 相同示例项目 https github com spring projects spring boot tree m
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • 如何将字符串解析为map

    有一个像A B C D E F这样的字符串 如何将其解析为map 我会使用拆分 String text A B C D E F Map
  • SWT StyledText 有高度限制吗?

    我正在尝试创建一个应用程序 其中包含在 ScrolledComposite 中显示的 StyledText 框 我在 StyledText 框中显示大量行时遇到困难 超过 2 550 行似乎会导致问题 StyledText 框本身不能有滚动

随机推荐

  • Spring Data Neo4j:使用嵌入的 Neo4j 服务器:JAR 打包

    我终于能够在我的 java 应用程序中创建一个使用嵌入式数据库的服务器实例 如下所示here 当我从 Eclipse 运行它时 它可以正常工作 但这实际上不是我的目的 除其他事项外 我的应用程序向数据库提供新的节点和关系 我有一个 Neo4
  • OWL 2 罗化

    在描述逻辑中 有一个概念叫 rolification OWL 和规则 第 3 2 节 它将概念 类 转换为角色 属性 例如 当我们滚动时R x 我们得到r x x 该技术对于在深度学习中表达一些规则很有用 我们如何在 OWL 2 中做到这一
  • 使用 Mule 发送格式化邮件

    我正在使用 Mule 发送电子邮件 我需要为发送的文本添加格式 邮件的内容是有效负载 其中包含我在 Java 方法中形成的字符串 并使用表达式转换器发送到流程 我需要向该字符串添加格式 粗体 下划线 颜色 我该怎么做 这是我的流程的摘录
  • 如何使用 PHP GD 显示动态生成的内嵌图像

    我正在尝试使用 PHP GD 合并图像来动态生成图像 我想知道是否有一种方法可以在我的网页中显示图像 而不需要将其存储在服务器上的某个位置 例如 我创建了以下代码来合并图像 function create image main image
  • 乘客安装时出现转换错误。对 nginx 模块有影响吗?

    在OS X 10 6 8下安装passenger 首先在rbenv下 然后卸载rbenv后 也在rvm下 Mini user gem install passenger 正在生成转换错误 unable to convert xE4 to U
  • Pygame 需要“for event in pygame.event.get()”以免崩溃

    该程序像这样工作正常 但是 我不明白为什么它需要无用的for event in pygame event get None in the gameOverwhile 语句里面game loop 如果您能找到一种方法来删除它或解释为什么没有它
  • 使用内置 Python 模块填写 Web 表单数据

    好吧 我已经在我的冒险中使用了 mechanize requests beautiful soup 甚至 selenium 来做这样的事情 我得出的结论是 urllib 和其他默认模块是最好的方法 唯一的问题是我根本不知道如何使用它 那么有
  • aspnet core 应用程序中的 Autofac.Multitenant 似乎无法正确解析租户范围的依赖项

    我正在升级利用 Autofac Multitenant 框架的多租户 dotnet 核心解决方案 我没有太多运气让租赁解决方案正常工作 我在这里创建了一个简单的问题演示 https github com SaltyDH AutofacMul
  • 在 python 中使用绘制数据的微型版本作为图例句柄

    有没有办法使用 matplotlib 中的图形中绘制的线作为图例中的句柄 例如 我在想 在这个基本代码中 而不是图例中的直线 有一个我绘制为手柄的正弦波的小版本 import matplotlib pyplot as plt import
  • 在 RDLC 报告中添加数据集时 Visual Studio 2013 崩溃

    当我尝试将数据集添加到 asp net 项目中的任何 RDLC 报告时 Visual Studio 停止工作并重新启动 我尝试使用 VS 2012 和 2015 添加数据集 两次尝试都产生了与您相同的错误 这种情况只发生在我的 VS 项目之
  • Windows 8.1 64 位中的 IBM MobileFirst Platform 安装

    我正在使用我的办公室笔记本电脑 Lenovo vV310 8GB RAM 64 位操作系统 Windows 8 1 过去几天我一直在尝试修复 IBM Mobile First Platform 的安装问题 我从链接下载了 IBM Mobil
  • HTML5 直播

    对于学校 我需要建立一个 HTML5 直播网站 他们有一个一直在使用的 Flash 流播放器 但现在希望它改用 HTML5 我怎样才能做到这一点 我尝试使用视频标签 但无法正常工作 下面是我的代码 有人能指出我正确的方向吗
  • 将两个同名的 .swift 文件添加到项目中

    我正在尝试将 swagger 客户端集成到我的项目中 我能够从 swagger 生成类 Swagger for swift 3 使用 Alamofire 进行 newtork 操作 问题是生成的类名称之一是 Response Alamofi
  • 无法打开该文件,因为您无权查看该文件

    imageData NSData dataWithContentsOfURL self pdfFileUrl options NSDataReadingMappedAlways error error NSLog error localiz
  • sublime 3 制表符和空格不匹配

    我已经浏览网页3次了 但仍然没有解决方案 我有一个简单的 js 文件 我希望我的制表符是 4 个空格而不是 2 个 我将首选项设置更改为选项卡大小为 4 更改了语法特定设置 一切 但仍然是同样的问题 有任何想法吗 Click On状态栏上的
  • 如何将图片保存到localStorage并在下一页显示?

    所以 基本上 我需要上传单个图像 将其保存到 localStorage 然后将其显示在下一页上 目前 我上传了 HTML 文件
  • Jquery ui 选项卡的不同动画

    我正在使用 jquery ui 选项卡小部件 我没有使用 jquery 主题 因为我更喜欢做我自己的 css 和东西 我已经让它工作了 但我想要的是当单击不同的选项卡时 选项卡内容具有不同的动画效果 我想要的是新的选项卡内容从左侧滑入 目前
  • 软删除实体的导航属性

    我有 2 个实体 我是我的数据库 它们看起来像 Vehicles Id VehicleNumber IsDeleted WorkerId Workers Id Name Address 在我的 edmx 中 VehicleId Id Veh
  • 将 Azure 文件服务 CloudFileShare 映射为云服务每个实例上的虚拟目录

    我有一个天蓝色的云服务 我正在尝试升级该服务以实现高可用性 并且我已订阅了已在预览门户中启用的 Microsoft Azure 文件服务预览版 我已经创建了一个新的存储帐户 并且可以看到该存储帐户现在有一个文件端点位于 https
  • 序列化 Collat​​or 实例

    我正在尝试序列化InstitutionResultView类的一些对象 它基本上是包装器番石榴的 TreeMultimap import java io Serializable import java text Collator impo