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方法将返回可选值(如果存在)或抛出异常。