Tag: 可选

Java 8可选asSet()

所以我现在已经使用了Guava的Optional一段时间了,我转向Java 8所以我想使用它的Optional类,但它没有我最喜欢的方法来自Guava,asSet()。 有没有办法用Java 8 Optional来做到这一点,我没有看到。 我喜欢将可选项视为一个集合,所以我可以这样做: for( final User u : getUserOptional().asSet() ) { return u.isPermitted(getPermissionRequired()); } 在某些情况下,避免需要额外的变量。 IE Optional optUser = getUserOptional(); if ( optUser.isPresent() ) { return optUser.get().isPermitted(getPermissionRequired()); } 有没有一种简单的方法可以在Java 8的Optional中复制Guava风格? 谢谢

我需要使用Java 8 Optional方法获取包装值,或者调用void返回Consumer lambda

我不熟悉在Java 8中使用选项。我知道方法orElseGet()需要一个供应商,orElseThrow()也需要一个抛出exception的供应商。 orElseThrow()可能是一个很好用的,如果我可以构造自己的exception并在触发该exception时执行某些操作。 我的主要目标是使用一个方法来获取未包装的值,或者如果可选的包装为null,则实际执行一个完全不同的函数。 寻找最接近的东西: class DoInsteadClass { public void doInstead() { // Do this instead } } Optional myString = “Hello”; num.orElse(DoInsteadClass::doInstead); 如果执行此操作的唯一方法是orElseThrow(),并且只要我可以使用’do this instead’代码处理exception,那也应该没问题。 它只是使我的代码库更大,因为我必须为2或3个案例创建一些不同的自定义实用程序供应商,其中一些可选值将返回null。 问题是,.ifPresent()用值调用指定的使用者,否则什么也不做。 如果值为null,我需要它来进行SOMETHING。 我当前的代码使用自定义的解决方法,我首先检查值是否为null,如果是,则执行所选的函数。 然后下一个语句是检查ifPresent()的语句。 所以这是做同样的事情,我只是在寻找更多糖衣,一个声明版本。

如何将OptionalLong映射到Optional ?

我有一个OptionalLong的实例。 但是我的一个库需要一个Optional作为参数。 如何将OptionalLong转换为Optional ? 我梦想着这样的事情: OptionalLong secondScreenHeight = OptionalLong.of(32l); // or: OptionalLong.empty() api.setHeight(secondScreenHeight.maptoRegularOptional()); // .maptoUsualOptional does not exist

如何将单个元素列表转换为java 8可选

如何很好地将包含一个或零个元素的列表转换为Optional? 丑陋的代码: List integers = new ArrayList(); Optional optional = integers.size() == 0 ? Optional.empty() : Optional.of(integers.get(0));

使用返回Optional 的方法的Mockito错误

我有一个接口与以下方法 public interface IRemoteStore { Optional get(String cacheName, String key, String … rest); } 实现接口的类的实例称为remoteStore。 当我用mockito模拟它并在以下时使用该方法: Mockito.when(remoteStore.get(“a”, “b”)).thenReturn(“lol”); 我收到错误: 无法解析方法’thenReturn(java.lang.String)’ 我认为这与get返回Optional类的实例这一事实有关,所以我尝试了这个: Mockito.<Optional>when(remoteStore.get(“cache-name”, “cache-key”)).thenReturn (Optional.of(“lol”)); 但是,我得到了这个错误: 当Mockito中的(可选”)无法应用于(可选”)时。 它唯一有效的时间是: String returnCacheValueString = “lol”; Optional returnCacheValue = Optional.of((Object) returnCacheValueString); Mockito.<Optional>when(remotestore.get(“cache-name”, “cache-key”)).thenReturn(returnCacheValue); 但上面会返回一个Optional”的实例,而不是Optional’。 为什么我不能直接返回Optional”的实例? 如果可以的话,我应该怎么做呢?

获取可选对象的字段或返回null

我有可选对象: Optional newestDetail; 我想返回newestDetail.getId()或者如果newestDetail为null则返回null 。 我们有更复杂的方法做到这一点,而不是遵循? return newestDetail.isPresent()?newestDetail.get().getId():null;

如何在bean存在时注入它

我有弹簧上下文文件的以下结构( ->代表’includes’): A1.xml -> B.xml & C.xml A2.xml -> B.xml C.xml定义了一个bean c B.xml定义了一个依赖于c的bean b 显然这对于​​A2来说是失败的,因为在上下文A2没有定义c 。 如何指定类似的东西:如果你在上下文中有c ,请将其注入b否则只注入null ? 我看了一下Spring EL但是 刚给了我一个名字的NoSuchBeanDefinitionException ,它似乎是b.toString()的值! 顺便说一句:我已经知道这件东西太乱了,应该尽快清理干净。

如何向上转换Java 8可选对象?

是否有一种有效的方法在使用Optional对象时执行向上转换。 这是一个示例代码: class A{} class B extends A{} B func(){ //do something return new B(); } Optional func2(){ //do something return Optional.of(new B()); } main() { A a = func(); // Upcasting works fine B b = func(); // Upcasting works fine Optional b = func2(); // 1. Upcasting works fine Optional a = func2(); […]

仅在存在时打开可选项

所以目前我有 String uri = website.getUri(); Optional pageDetail = webClient.getDetailOfUri(uri); String displayName; String description; if (pageDetail.isPresent()) { displayName = pageDetail.get().getName(); description = pageDetail.get().getDescription(); } else { displayName = uri; description = “”; } 我正在调用getDetailOfUri(uri)方法,它返回一个Optional ,我想将字符串displayName和description设置为PageDetail对象字段的值(如果存在)。 否则,我想将其设置为某些默认值。 我的问题是,有没有更好的方法来重写这个? 我目前的代码似乎有点冗长乏味,我想知道是否有更简洁的方法来做到这一点。

如何使用Java 8流迭代嵌套for循环引用父元素?

我想使用java8 streams迭代嵌套列表,并在第一次匹配时提取列表的一些结果。 不幸的是,如果子元素与filter匹配,我还必须从父内容中获取值。 我怎么能这样做? // java7 Result result = new Result(); //find first match and pupulate the result object. for (FirstNode first : response.getFirstNodes()) { for (SndNode snd : first.getSndNodes()) { if (snd.isValid()) { result.setKey(first.getKey()); result.setContent(snd.getContent()); return; } } } // java8 response.getFirstNodes().stream() .flatMap(first -> first.getSndNodes()) .filter(snd -> snd.isValid()) .findFirst() .ifPresent(???); //cannot access snd.getContent() here