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

多映射的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

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

  • 问题内容: 我认为我的问题与此相似:如何实现具有多个键的Map?但有一个重要的区别。在这个问题中(如果我对它的理解是正确的,请告诉我是否正确),这些键应该总是唯一的。我想要一个Map形式: MyMap ,其中的键不一定是唯一的。如果那没有任何意义,我基本上想要一个二维数组,而不是通过坐标对引用元素,而是通过对象对引用它们。 是否有人对可以在其中工作的图书馆或自己实现此想法的好方法有任何想法?就库而