Java-使用.stream在List<>中查找

我正在尝试使用 .stream 运算符在 List<> 中查找对象,但出现语法错误我无法解决尽管遵循我在网上找到的示例...希望有人可以帮助解决我不理解的任何问题.

我将以下内容设置为要存储在 List<> 中的对象:

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class JelCodeMapping {
    private String jelCodeId;
    private String jelCodeName;
    private int network1;
    private int network2;
    private int network3;
}

然后实例化一个列表(它在其他地方填充)

private List<JelCodeMapping> jelCodeMappings;

然后我想在列表中搜索一个包含特定值的对象:

    private List<Integer> getNetworksForJelCode(String jelCode) {
        JelCodeMapping jelCodeMaping = jelCodeMappings.stream().filter(mapping -> mapping.getJelCodeId().equals(jelCode));

        List<Integer> jelCodeNetworks = new ArrayList<>();

//  other stuff happens here

        return jelCodeNetworks;
    }

但我使用 .stream() 运算符的行生成以下语法错误消息:

Incompatible Types
Required: <packagePath>.JelCodeMapping
Found: java.util.stream.Stream   <packagePath>.jelCodeMapping

我相当确定我正在遵循我发现的示例,但无法解决问题。我不明白什么?

感谢您的任何想法/见解

回答

您必须向流添加终端操作。

例如

JelCodeMapping jelCodeMaping = jelCodeMappings.stream()
    .filter(mapping -> mapping.getJelCodeId().equals(jelCode))
    .findFirst()
    .orElseThrow(() -> new RuntimeException(
        "JelCodeMapping not found: " + jelCode));

另请参阅流的文档,特别是filter、findFirst或findAny。

“不兼容的类型”错误是因为filter(Predicate)返回一个Stream. 将Stream不能分配给JelCodeMapping变量。

find 方法返回一个可选值,这些orElseThrow方法将返回可选值(如果存在)或抛出异常。


以上是Java-使用.stream在List&lt;&gt;中查找的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>