- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何在不对 map 进行任何更改的情况下仅在 map 值存在时对 map 值执行函数?我想使用类似于 Optional.ifPresent()
的“Java 8”声明式样式来执行此操作。
我的用例如下:
我收到部分对象的更新(新的或删除的),我想向它们的父级注册这些更新。对于簿记,我有以下内容:
Map<ParentId, Parent> parents = ...
接收新 child 时,我会执行以下操作:
parents.computeIfAbsent(child.getParentId(), k -> new Parent()).addChild(child));
但是对于删除,我找不到声明函数。直截了当,我会将其实现为:
if(parents.containsKey(child.getParentId())
{
parents.get(child.getParentId()).removeChild(child);
}
或者我可以将值包装在 Optional
中:
Optional.ofNullable(parents.get(child.getParentId()).ifPresent(p -> p.removeChild(child));
请注意,Parent 不是一个简单的列表,它包含的不仅仅是子项。所以以下不起作用(因为 removeChild()
不返回 Parent
):
parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());
我该怎么做,或者没有等效于 Optional.ifPresent()
的方法?
最佳答案
我认为您的 Optional
解决方案看起来不错,但对于
the following doesn't work (because removeChild() doesn't return a Parent):
parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());
您可以将 lambda 扩展为
parents.computeIfPresent(child.getParentId(), (k, v) -> { v.removeChild(); return v; });
不过我会说在这种情况下最直接的方法是最清楚的,我会接受它。
关于java - 映射 ifPresent 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920177/
我在OpenJDK(11)中发现Optional.ifPresent()的执行方法。 Here it is : public void ifPresent(Consumer action) {
我必须调用具有以下签名的过程: private Optional getAddress() 我用它来填写我系统上的客户记录。所以,我做了以下代码来设置记录的地址(如果存在)。 Optional add
我编写了有效的代码,但是我必须创建额外的行,有没有办法将其压缩为一行?逻辑:取最后一页,通过正则表达式执行搜索功能,如果没有找到,则取前一页,通过正则表达式执行搜索功能 Optional totalB
我正在尝试根据方法返回的选项构建流程。 我的问题是:有没有一种方法可以构建一个流,在得到例如 Optional (some) 的情况下拆分?并以一种很好的方式在另一种情况下执行另一个流程? (不使用
在方法内部,需要一个条件来执行逻辑。我的 IDE 中出现未处理的异常警告消息。用 try-catch 包裹整个 block 不会让消息消失。 public void changePassword(St
我需要一些关于以下代码片段的帮助。如果raiseWorkQueueTask可以找到任何null != previousPeriod.getOldId()和,则它应该返回通知riseWorkQueue
我如何制作将类型设置为 BYTES 或 SECONDS 的单个代码。在这里,我设置了一个默认的 BYTES,然后使用 setTypeAsSecondsIfCcTimeIsValid 函数调用将其覆盖为
如何在不对 map 进行任何更改的情况下仅在 map 值存在时对 map 值执行函数?我想使用类似于 Optional.ifPresent() 的“Java 8”声明式样式来执行此操作。 我的用例如下
我正在尝试了解流并遇到了一个问题:我想获取列表的最小值并将其分配给一个 int 变量。为此,我做了以下事情: List list = new ArrayList<>(); list.add(1
这个问题在这里已经有了答案: Optionally getting field (2 个答案) 关闭 6 年前。 用 java 8 可选,有没有办法写这行代码: Bar bar = fooOpt.i
我正在尝试了解 Java 8 中 Optional API 的 ifPresent() 方法。 我的逻辑很简单: Optional user=... user.ifPresent(doSomethin
我有一个 optional 整数列表。我希望查看列表是否实际存在,然后将其转换为流。这样做的一种方法是 Optional> listOfNumbers = ... if (listOfNumbers.
我在将旧式 if 用法转换为 Optional.ifPresent 时遇到问题。这是以前版本的代码。 State state = State.OK; final Optional checkExist
当前传入请求文件中的 xml 节点,必须填充值 01/22/2020。我们有一些新的测试用例,它们以空白发送并抛出异常。因此需要更改此逻辑以接受 null 。 除了可选类还有什么方法?保持代码整洁。
如何使用 collect 方法在嵌套的 ifPresent 方法中进行收集? 到目前为止,这就是我所拥有的: List result = list.stream()
我该如何改变: if (pAlarms[0].getMoIdentifier().isPresent()) { Optional alarmValues = getAlarmsFromMo(p
你好,我在这里做错了什么 我想获取基础 Id ,如果它不存在,则获取保险类型..代码片段粘贴在下面..但我在 orElse 部分收到错误,我什至尝试过 orElseGet() ...它说“Lambda
这个问题已经有答案了: Optional vs. null. What is the purpose of Optional in Java 8? [duplicate] (3 个回答) 已关闭 8
这个问题已经有答案了: Optional.of(null)will throw NPE, I need to verify null before call the method? (2 个回答) 已
所以我一定错过了一些东西,如果存在可选,我希望执行一个语句 block ,否则抛出异常。 Optional oX; oX.ifPresent(x -> System.out.println("hell
我是一名优秀的程序员,十分优秀!