假设我有一个Spring Data Repository方法。
Optional<Branch> findByName(@Nonnull final String name);
Run Code Online (Sandbox Code Playgroud)
我的业务逻辑是,如果我发现此方法执行有任何价值,我将抛出异常。
我可以这样做例如:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
Run Code Online (Sandbox Code Playgroud)
或另一种方式:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
Run Code Online (Sandbox Code Playgroud)
我不确定在这种情况下使用过滤器是否合适,因为我的方法Optional<Branch>
未返回列表。似乎在JDK中,如果有ifPresentThrow()方法可用,那将达到我的目的。
是的,此代码可以我不希望使用的命令式代码编写。所以我的问题是,是否可以实现PresentThrow()或以一种更好的方式以函数样式进行操作是一样的事情。提前致谢。
Java Integer类具有静态方法highestOneBit方法,该方法将在指定值的最高位一位的位置返回一个单个一位的值;如果指定值本身等于零,则返回零。
例如,int 17的输入将返回16;由于17可以二进制表示为10001,因此它将返回剩下的最远的一位,等于16。
在Integer类中,它在Java文档中具有以下实现。
public static int highestOneBit(int i) {
// HD, Figure 3-1
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);
return i - (i >>> 1);
}
Run Code Online (Sandbox Code Playgroud)
我只想知道以这种方式实现它的逻辑以及使用移位操作的逻辑。谁能给它一点点光。