【问题标题】:Foreach in java streamjava流中的foreach
【发布时间】:2018-02-22 23:32:50
【问题描述】:

我有一个方法:

  1. 有自定义对象列表,

  2. 获取变量参数

  3. 并且应该返回一个字符串列表,其中包含具有参数的对象的 id

CustomObject 看起来像:

{
    "id": "1a",
    "secondObjectList": [{
        "name": "a",
        "params": ["param1", "param2", "param3"]
    },
    {
        "name": "b",
        "params": ["param2"]
    }]
}

当对象只有一个参数时使用流的方法:

public List<String> findObjectsIdsThatHaveParam(List<CustomObject> objectsList, String param) {
    return objectsList.stream()
            .filter(object -> object.getSecondObjectList.get(0).getParams().contains(param))
            .map(CustomObject::getId)
            .collect(Collectors.toList());
}

我不知道如何通过 params arrayList 进行迭代。你知道我如何使用流来做到这一点吗?

【问题讨论】:

  • 使用filter(o -&gt; o.getParams().contains(param))
  • 在这种情况下你是对的。我的错误,数组应该有一个带有 aray 的下一个对象。我会编辑它。
  • 如果你想接受至少有一个参数包含(但不等于)给定字符串的对象,那么使用filter(o -&gt; o.getParams().stream().anyMatch(p -&gt; p.contains(param))
  • 请为ObjectClass 添加适当的Java 类以避免任何类型的错误答案/cmets。
  • 现在使用双嵌套列表,使用filter(o -&gt; o.getSecondObjectList().stream().anyMatch(x -&gt; x.getParams().contains(param)))

标签: java java-stream


【解决方案1】:

我认为您对如何遍历所有元素直到满足提供的条件感到困惑。

流利用内部迭代,因此您可以 从getSecondObjectList 创建一个流并利用anyMatch 提供您的标准。

.filter(object -> object.getSecondObjectList.stream()
               .anyMatch(e -> e.getParams().contains(param)))
...
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多