Tag: 可选

什么是最优雅的方式来添加两个可选的数字

我需要对包含选项的两个大小数执行添加操作: Optional ordersTotal; Optional newOrder; 我想实现ordersTotal + = newOrder重要的是要注意,如果两个值都为空,则结果同样应为空(即不为零)。 这是我想出的: ordersTotal = ordersTotal.flatMap( b -> Optional.of(b.add(newOrder.orElse(BigDecimal.ZERO)))); 但我想知道是否有一个更优雅的解决方案。

可选vs抛出exception

是不是因为Java 1.8返回Optional对象比抛出exception更可取? 我越来越多地看到这样的代码: public Optional get(int i) { // do somtething Object result = … Optional.ofNullable(result); } 而不是这个: public Object get(int i) { if(i=size) { throw new IndexOutOfBoundsException(“Index: ” + i + “. Size: ” + size); } // do somtething Object result = … return result; } 是否意味着我们需要忘记旧方法并使用新方法? 什么是Optional的适合?

如何正确返回方法的可选?

我已经阅读了很多Java 8 Optional,我确实理解了这个概念,但是在我的代码中尝试自己实现它时仍然遇到困难。 虽然我已经在网上找到了很好的例子,但我没有找到一个有很好解释的网站。 我有下一个方法: public static String getFileMd5(String filePath) throws NoSuchAlgorithmException, IOException { AutomationLogger.getLog().info(“Trying getting MD5 hash from file: ” + filePath); MessageDigest md = MessageDigest.getInstance(“MD5”); InputStream inputStream; try { inputStream = Files.newInputStream(Paths.get(filePath)); } catch (NoSuchFileException e) { AutomationLogger.getLog().error(“No such file path: ” + filePath, e); return null; } DigestInputStream dis = new DigestInputStream(inputStream, […]

在Java 8中,转换Optional.empty中空String的Optional

给定一个String我需要获得一个Optional,如果String为null或为空,则结果为Optional.empty。 我可以这样做: String ppo = “”; Optional ostr = Optional.ofNullable(ppo); if (ostr.isPresent() && ostr.get().isEmpty()) { ostr = Optional.empty(); } 但肯定必须有更优雅的方式。

Java 8中Optional类型的有效用法

这是Java 8中Optional类型的有效(预期)用法吗? class Foo { private final Integer id; private final String name; private final String countryCode; Foo(final Integer id, final String name, final String countryCode) { this.id = id; this.name = name; this. countryCode = countryCode; } public String getName() { return name; } public String getCountryCode() { return countryCode; } } class FooSrv […]

用Java 8替换重复的get语句可选

我有一个用例,我有嵌套类和顶级类的对象。 我想得到一个在第N级的值。 我正在重复使用getter来实现这一点以避免NPE。 示例代码(假设有吸气剂) class A { String a1; String getA1() { return a1; } } class B { A a; A getA() { return a; } } class C { B b; B getB() { return b; } } class D { C c; C getC() { return c; } } 如果我有一个D类的对象d ,并且想要获得A的String a1 […]

Java 8可选

我想检查一个特定的对象大小是否大于0.如果它大于0然后我想创建一个可选对象,如果没有,那么我想返回一个Optional空。 这是java代码的长版本: if(fooA.size>0) { return Optional.of(new Foo()); } else { return Optional.empty(); } 有没有办法使用java 8的可选库将其压缩成一行?

orElse-Branch中的可选抛出exception

所以我正在使用Optionals,并遇到了一个奇怪的行为。 我想知道这是否真的是一个强烈的“function”或者什么……奇怪… 下面是给出的示例:我有一个带有Optional的方法,其中orElse我想评估另一个可选项。 如果其他Optional不存在,我将引发IllegalArgumentException: firstOptionalVar.orElse(secondOptionalVar.orElseThrow(IllegalArgumentException::new)); 现在,如果secondOptionalVar是一个空的Optional,它将引发IllegalArgumentException,即使firstOptionalVar存在也是如此。 这对我来说似乎不对。 如果firstOptionalVar不存在,我希望它只会引发IllegalArgumentException。 使用java7方法来解决这种行为并不是什么大问题: firstOptionalVar.isPresent() ? firstOptionalVar.get() : secondOptionalVar.orElseThrow(IllegalArgumentException::new); 有没有其他人以前经历过这种行为? 这真的是选项应该表现的方式吗?

在Java-8中重构多个If语句

我需要在课堂上validation必填字段 例如, 9字段不能为null 。 我需要检查它们是否都为null但我现在使用多个if语句,如下所示: StringBuilder mandatoryExcessFields = new StringBuilder(MANDATORY_EXCESS_FIELDS.length); if(Objects.isNull(excess.getAsOfDate())){ mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[0]); } if(StringUtils.isEmpty(excess.getStatus())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[1]); } if(Objects.isNull(excess.getLimit())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[2]); } if(!Objects.isNull(excess.getLimit()) && Objects.isNull(excess.getLimit().getId())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[3]); } if(!Objects.isNull(excess.getLimit()) && Objects.isNull(excess.getLimit().getAsOfDate())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[4]); } if(Objects.isNull(excess.getExposure())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[5]); } if(!Objects.isNull(excess.getExposure()) && Objects.isNull(excess.getExposure().getCoordinates())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[6]); } if(!Objects.isNull(excess.getExposure()) && Objects.isNull(excess.getExposure().getValue())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[7]); } if(StringUtils.isEmpty(excess.getLimitValue())) { mandatoryExcessFields.append(MANDATORY_EXCESS_FIELDS[8]); } 我们是否有更好的方法来减少这个样板代码或任何设计模式或Java-8的任何新function,我可以利用它?

do-while with Java8-Optional

在我的一些项目中,我经常使用do-while-checkNextForNull-getNext循环模式(不知道它是否有正式名称)。 但是在Java8中,使用Optional比在客户端代码中检查空引用更清晰。 但是当在这种循环模式中使用Optional时,代码变得有点冗长和丑陋,但因为Optional有一些方便的方法,我希望必须存在比我在下面提出的更简洁的方法。 例: 鉴于以下课程。 class Item { int nr; Item(nr) { this.nr = nr; // an expensive operation } Item next() { return …someCondition…. ? new Item(nr + 1) : null; } } 其中第一个项目始终具有nr == 1并且每个项目确定下一个项目,并且您不希望创建不必要的新项目。 我可以在客户端代码中使用以下循环do-while-checkNextForNull-getNext模式: Item item = new Item(1); do { // do something with the item …. } while ((item […]