小编Mos*_*our的帖子

如果存在Optional <>值,则引发异常

假设我有一个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 optional java-8

5
推荐指数
2
解决办法
134
查看次数

了解Integer.highestOneBit()方法实现背后的逻辑

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)

我只想知道以这种方式实现它的逻辑以及使用移位操作的逻辑。谁能给它一点点光。

java bit

3
推荐指数
1
解决办法
314
查看次数

标签 统计

java ×2

bit ×1

java-8 ×1

optional ×1