【问题标题】:Get boolean value from inner filter of stream从流的内部过滤器获取布尔值
【发布时间】:2023-03-13 21:46:01
【问题描述】:

考虑我有以下代码

public static void main(String[] args) {
    Map<String, List<String>> map = new HashMap<>();
    map.put("a", Arrays.asList("1", "2", "3", "4"));
    map.put("b", Arrays.asList("6", "7", "4", "5"));
    map.entrySet().stream().filter(t -> t.getValue()
            .stream().filter(v -> Integer.valueOf(v) > 0)
            .**WhatShouldIputThereToMakeitBolean**)
            .collect(Collectors.toSet());
}

我想要做的是我有一个地图,它的值是字符串列表。

这些值将被转换为整数,并检查该值是否大于给定值,例如在第二个/内部过滤器中。

我可以将它分成小部分,因为我使用了两个过滤器,但从内部过滤器我无法获得布尔值,因此我将获得所需的流,然后使用 flatmat(Collection::stream) 和然后将转换为 set(以避免重复),因为两个列表都包含一个共同的值,即 4

我需要的输出必须是整数和单个集合的形式,它们将像 [1,2,3,4,5,6] 一样合并,这里的值 4 是重复的,如果它必须限制结果集中的值,如果价值小于提供的价值

我有一个简单的查询,因为我正在遍历地图,并且该地图包含列表作为值,在这里我无法从内部 filter 获取布尔值

【问题讨论】:

  • 你想在场景中加入什么?
  • 我不知道你在问什么。你能澄清一下吗?
  • @4castle 我正在尝试合并这些值
  • 哪些值?怎么合并?您能否编辑问题以显示您想要的输出?
  • 嗯,这并没有多大帮助。能否请您显示该集合应在最后存储哪些值?

标签: java java-8


【解决方案1】:

如果我理解正确的话,你需要先把地图的列表展平,然后将大于0的唯一值收集到Set

您可以使用map.values().stream() 引导以获得地图的值。

Set<Integer> set = map.values().stream()
    .flatMap(Collection::stream)
    .map(Integer::valueOf)
    .filter(num -> num > 0)
    .collect(Collectors.toSet());

【讨论】:

  • 感谢它的工作,没想到我最终会变得那么容易,顺便说一句:)
  • @n00b 我刚刚意识到你想要的输出是Integer。我为此更新了。
  • 谢谢,这部分很简单,而不是主要问题:)
【解决方案2】:

这可能会对你有所帮助,谓词:http://howtodoinjava.com/java-8/how-to-use-predicate-in-java-8/.. 谓词是根据其变量的值可能为真或假的陈述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多