使用java流检查arraylist内容

hen*_*rik 8 java arraylist java-8 java-stream

考虑以下ArrayList:

[0] => Person
[1] => User
[2] => Dummy
Run Code Online (Sandbox Code Playgroud)

如何使用Java流检查此arraylist是否包含除Personor 之外的任何其他对象User

所以,我可以做一个if语句,如果它包含返回null PersonUser,或者返回数组列表本身,如果它包含任何其他对象之外PersonUser像这样:

if( /*arrayList contains only Person and User*/ ) {
  return null;
}
else {
  //arrayList contains other objects besides Person and User
  return arrayList;
}
Run Code Online (Sandbox Code Playgroud)

Man*_*dis 10

替代保罗的答案(在你的问题中使用if-else)

if (arrayList.stream().allMatch(o -> o instanceof Person || o instanceof User)) {
    return null;
} else {
    return arrayList;
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,不建议使用`Optional <List <... >>`之类的东西.通常,您希望返回"Collections.emptyList()"或仅删除所有非法项目的新列表.返回"null"或缺少列表是一个相当不寻常的要求,因为它意味着调用者必须执行"null"检查,因此有条件地不使用列表引用,这与仅仅返回` `allMatch`的boolean`值. (4认同)

Pau*_*ton 9

假设PersonUser是类型,而不是具体的对象,你可以做这样的事情.

return list.stream()
           .filter(o -> !(o instanceof Person) && !(o instanceof User))
           .findAny()
           .isPresent() ? list : null;
Run Code Online (Sandbox Code Playgroud)

  • @hagrawal他指定他想使用溪流. (7认同)
  • 哎呀,我错过了,谢谢你指出来. (2认同)