当前位置: 首页 > 知识库问答 >
问题:

多映射的Java可选用法

袁宜
2023-03-14

大陆是一个复合物体。结构为:

Continent
--Country
----State
------Town

所以在这个符号中:

town= Optional.of(continent)
            .map(Continent::getCountry)
            .map(Country::getState)
            .map(State::getTown)
            .orElse(null);

这很好,但当我尝试编写通用映射器时,

  public static <T, R> T getFromMapping(R source,
                                      T defaultValue,
                                      Function<?,?>... functions) {
      Optional sourceWrapper = Optional.ofNullable(source);
      for (Function function : functions) {
         sourceWrapper.map(function);
      }
    return (T) sourceWrapper.orElse(defaultValue);
  }

并通过以下方式调用它

 portfolio = getFromMapping(continent, null,
            ((Function<Continent, Country>) Continent::getCountry)
            ((Function<Country, State>) Country::getState),
            ((Function<State, Town>) State::getTown));

编译得很好,但不起作用。地图绘制者跳到第二步,说大陆不能投射到这个国家,为什么?在进行映射时应该没有强制转换,如何修复它?

共有1个答案

方和豫
2023-03-14

可选#map不会修改自己,而是返回一个新的可选,因此source ceWrapper仍然包含您的大陆。您应该在for循环中重新分配变量:

sourceWrapper = sourceWrapper.map(function);
 类似资料:
  • 如何过滤

  • 问题内容: 如何在hibernate的hbm文件中创建可选的一对一映射?例如,假设我有一个User和一个last_visited_pa​​ge表。用户可能有也可能没有last_visited页面。这是我当前在hbm文件中的一对一映射: 用户类别: LastVisitedPage类: 上面的示例不允许创建没有最后访问页面的用户。新创建的用户尚未访问任何页面。如何更改hbm映射以使userPrefs映

  • 我想使用另一个映射器中的一个映射器,并且这两个映射器都使用相同的签名实现相同的方法,因此我得到了“mapping Property的mapping methods found for mapping property” 我已经尝试在接口上实现共享方法,然后在两个映射器上扩展接口,但问题仍然存在 我想我需要使用某种限定词。我在谷歌和官方文档中搜索,但我不知道如何应用这项技术

  • 我需要将带有多个可选参数的路径映射到我的endpoint

  • 我需要解析一个XML文件,然后将其映射到一个Java对象。到目前为止,我使用带注释的POJO来执行此操作: 然后用JAXB解组它: 问题:有时,我的客户发送的文件具有稍微不同的标记名(例如,< code>Eventlist而不是< code>EventList) 是否有允许标记同时使用两个名称的选项?到目前为止,我通过在POJO中给出2个属性来解决这个问题: 这个很难维护,禁止我使用‘必填’属性,

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 在Java中将值(“ o”)保留在像这样的树结构中的最佳方法是什么: 它看起来像一棵树,但是我不需要任意深度。我宁愿需要强大的数据类型和预定义的美观方法来处理最终结构。 我需要能够通过键获取某种值列表-就像在我的图片上一样。换句话说,结构应 不 以任何方式变得平坦。 我需要回来。 现在,我使用Map来实现此功能,但是由于需要检查结构的每个级