为我在原始问题中提出的错误代码示例道歉。我试图把我的问题简单化,但结果却相当令人困惑。
我稍微修改了一下代码:
Map<String, Boolean> map1 = new HashMap<>();
map1.put("Yes", Boolean.FALSE);
map1.put("No", Boolean.FALSE);
Map<String, Map<String, List<String>>> map2 = new HashMap<>();
List<String> list1 = Arrays.asList("Apple", "Peach");
List<String> list2 = Arrays.asList("Pear", "Orange");
Map<String, List<String>> innerMap = new HashMap<>();
innerMap.put("fruit1", list1);
innerMap.put("fruit2", list2);
map2.put("Fruits", innerMap);
map2.put("Vege", new HashMap<>());
Optional<? extends Entry<String, ? extends Object>> optional = Stream
.of(map1.entrySet().stream().filter(e -> e.getValue()).findFirst(),
map2.entrySet().stream().filter(entry -> entry.getValue().entrySet()
.stream()
.anyMatch(e -> e.getKey().equals("Fruit") && e.getValue().stream().anyMatch(
i -> i.equals("Pear"))))
.findFirst())
.filter(Optional::isPresent).map(Optional::get).findFirst();
optional.orElse(new AbstractMap.SimpleEntry<>("NULL", null));
我得到了第一个错误:
所以我把最后一行改为:
optional.orElse(new AbstractMap.SimpleEntry<String, Object>("NULL", null));
然后在Orelse上弹出一个新的错误:
Optional>类型中的方法orElse(Capture#4-of?extends Map.Entry)不适用于参数(AbstractMap.SimpleEntry)
我最初的问题是,我不知道如何为这个可选项提供默认值,因为条目的值类型是泛型的(我现在还不知道答案)。
受@ole启发,我这样重构代码:
String result = Stream
.of(map1.entrySet().stream().filter(e -> e.getValue()).map(Map.Entry::getKey).findFirst(), map2
.entrySet().stream().filter(entry -> entry.getValue().entrySet()
.stream()
.anyMatch(e -> e.getKey().contains("fruit") && e.getValue().stream().anyMatch(
i -> i.equals("Pear"))))
.map(Map.Entry::getKey)
.findFirst())
.filter(Optional::isPresent).map(Optional::get).findFirst().orElse("NULL");
System.out.println("result: " + result);
虽然我只将过滤后的条目的键收集到流中,但JAVA编译器似乎工作得很好。我得到的摘除结果是
Map.Entry<String, ?> result = Stream.of(map1, map2)
.flatMap(m -> m.entrySet().stream())
.filter(e -> e.getKey().equals("Yes"))
.findFirst()
.orElse(new AbstractMap.SimpleEntry<>("NULL", null));
System.out.println(result);
产出:
NULL=NULL
您对findfirst
中的可选
的处理过于复杂。不要使用ispresent
,也不要使用get
,orelse
为您提供一切服务。
可能有一个非常明显的答案,但如何做到以下几点: 基本上是从一个类型中检索所有键,以循环通过?
问题内容: 所以我有一张地图: 我会像这样添加元素: 我有如下通用方法: 现在,这段代码可以很好地工作,并且没有编译器问题: 但是,当我尝试这样做时: 编译器向我显示以下警告:类型安全:通用方法verifyType(String,Class)的未经检查的调用verifyType(String,Class) 这让我感到困惑…请帮助… 问题答案: 更改: 至 通过仅将类型声明为“ Class”,就失去
我有一个Spring启动应用程序,它定义了: 写入kafka主题的REST控制器,STREAM_TOPIC_IN_QQQ 一个从STREAM_TOPIC_IN_QQQ(group pId="bar")和日志读取的KafkaListener 查看主题并记录的KStream,将其转换为另一种类型,然后将其写入STREAM_TOPIC_OUT_QQQ 另一个从STREAM_TOPIC_OUT_QQQ读取
在Swift中处理选项的习惯用法似乎过于冗长,如果您只想在值为零的情况下提供一个默认值: 涉及不必要的代码复制,或者 这需要不是常量。 Scala的选项monad(与Swift的可选选项基本相同)的方法是: 我错过什么了吗?斯威夫特已经有了一个紧凑的方法来实现这一点吗?或者,如果做不到这一点,是否可以在可选的扩展中定义?
它是关于java中具有两种泛型类型(一种用于返回类型,另一种用于形式参数)的泛型方法以及如何实现它。我想我在图片中缺少一些东西来让它工作。 事情是这样的... 这是工作 : 这不起作用: java编译器告诉我: 好吧,就是这样。提前感谢大家!希望它能在未来帮助别人! P、 D:这不是枚举类型的问题。它发生在类和层次结构之间。所以别怪Enum了,我试过了,但没用。 对于泛型参数 我们可以做一个一般规
我正在尝试用来自spring WebFlux的WebClient制作一个客户端库。 服务器返回如下JSON所示的响应: 结果字段包含元素数组,这些元素可以根据使用的API而不同。 有关该API的更多信息,请参阅ServiceNow产品中的表API。 正如您在文档中所看到的,API路径如下所示:GET/now/table/{tableName},其中tableName可以是不同的值,tipology