按java的特定属性筛选对象

按java的特定属性筛选对象,java,arraylist,java-stream,Java,Arraylist,Java Stream,所以我有一节课: 公务舱座位{ 私人长id; 私有浮动位置X; 私人浮动头寸; 私人座位; 私有字符串标签; //接球手和接球手 } 我有座位的列表: List seatList=//从存储库获取数据; 我还有一个arraylist包含ID列表: List idList;//例如:[1,2,3] 我想筛选seatList,以便筛选的ArrayList不包含id来自idList的Seat对象,因此我尝试使用流: List filteredSeat=seatList.stream() .过滤器

所以我有一节课:

公务舱座位{
私人长id;
私有浮动位置X;
私人浮动头寸;
私人座位;
私有字符串标签;
//接球手和接球手
}
我有
座位的
列表

List seatList=//从存储库获取数据;
我还有一个
arraylist
包含ID列表:

List idList;//例如:[1,2,3]
我想筛选
seatList
,以便筛选的
ArrayList
不包含id来自
idList
Seat
对象,因此我尝试使用流:

List filteredSeat=seatList.stream()
.过滤器(座椅->{
//函数筛选seat.getId(),以便返回id不等于idList中id的seat对象
})
.collect(Collectors.toList());

我找不到正确的函数来做这件事。有人建议我试试吗?

您想使用中的重写方法,否定表示在
列表中找不到
id

Set<Seat> filteredSeat = seatList.stream()
    .filter(seat -> !idList.contains(seat.getId()))
    .collect(Collectors.toSet());
Set filteredSeat=seatList.stream()
.filter(seat->!idList.contains(seat.getId()))
.collect(收集器.toSet());
几点注意:

  • 您希望使用
    Set
    而不是
    List
    进行有效的查找。此外,ID之间存在重复值是没有意义的,因此
    Set
    是一个不错的选择
  • Collectors.toSet()
    results
    Set
    ,因此流的返回类型为
    Set

您想使用来自的重写方法,否定意味着
列表中找不到
id

Set<Seat> filteredSeat = seatList.stream()
    .filter(seat -> !idList.contains(seat.getId()))
    .collect(Collectors.toSet());
Set filteredSeat=seatList.stream()
.filter(seat->!idList.contains(seat.getId()))
.collect(收集器.toSet());
几点注意:

  • 您希望使用
    Set
    而不是
    List
    进行有效的查找。此外,ID之间存在重复值是没有意义的,因此
    Set
    是一个不错的选择
  • Collectors.toSet()
    results
    Set
    ,因此流的返回类型为
    Set

    • 最简单的解决方案是一个for-each循环,在该循环中,您根据座椅id检查每个怠速

      也许像

      List<Seat> FilteredList;
      for ( Seat CurSeat : seatList ){
          for(int i = 0; i < idList.size(); i++){
      
      列表过滤器列表;
      用于(座椅光标:座椅列表){
      for(int i=0;i
      如果CurSeat的ID是idList的一部分,则不会将其添加到新列表中。 这肯定不是最简单的方法,但如果你想找一件容易的事情,这可能就是。
      希望这能有所帮助!

      最简单的解决方案是一个for-each循环,在该循环中,您根据座椅id检查每个怠速

      也许像

      List<Seat> FilteredList;
      for ( Seat CurSeat : seatList ){
          for(int i = 0; i < idList.size(); i++){
      
      列表过滤器列表;
      用于(座椅光标:座椅列表){
      for(int i=0;i
      如果CurSeat的ID是idList的一部分,则不会将其添加到新列表中。 这肯定不是最简单的方法,但如果你想找一件容易的事情,这可能就是。
      希望这有帮助!

      假设您相应地实现了
      equals
      方法(如前面提到的),那么有一个更短的解决方案:

      seatList.stream()
         .distinct()
         .collect( Collectors.toList() );
      

      假设您相应地实现了
      equals
      方法(就像前面提到的那样),那么有一个更短的解决方案:

      seatList.stream()
         .distinct()
         .collect( Collectors.toList() );