Java流-验证列表中至少有一个元素包含在另一个元素中

Java流-验证列表中至少有一个元素包含在另一个元素中,java,java-8,java-stream,Java,Java 8,Java Stream,我有一张地图。比方说 Map<Long, Train> 有什么更好的选择? 流还是不流 e、 g tagDataContainer.getDeliveryGroupMap().values().stream().filter(dg->{ Sets.SetView intersection=Sets.intersection(Sets.newHashSet(dg.getPlacements()),Sets.newHashSet(placementsToChangeStatusToP

我有一张地图。比方说

Map<Long, Train> 
有什么更好的选择? 流还是不流

e、 g

tagDataContainer.getDeliveryGroupMap().values().stream().filter(dg->{
Sets.SetView intersection=Sets.intersection(Sets.newHashSet(dg.getPlacements()),Sets.newHashSet(placementsToChangeStatusToPublish));
返回交叉点。size()>0;
}
);

您可以简化过滤器:

List<Train> = 
    trainMap().values()
              .stream()
              .filter(t-> t.getTrainParts().stream().anyMatch(p->blueParts.contains(p)))
              .collect(Collectors.toList());       
列表=
trainMap().values()
.stream()
.filter(t->t.getTrainParts().stream().anyMatch(p->blueParts.contains(p)))
.collect(Collectors.toList());
如果您可以将
blueParts
更改为
HashSet
而不是
List
,您的代码将运行得更快,因为
blueParts.contains()
将需要恒定的时间而不是线性时间。

基于您的问题:“我想迭代地图并收集至少有一个蓝色部分的所有列车。”我想你们正在寻找在bluepart列表中至少有一个元素的火车,下面是你们可以做的事情


List trainList=trainMap.values().stream().filter(t->t.getBlueParts().size()>0).collect(collector.toList())

只是想知道:“部分”是整数吗?有趣的方法;-)这是一个例子。ID指向部件。您可以使用
blueParts::contains
作为谓词。如果这些代码>整数< /代码> S源于一系列连续值(如IDS通常所做的那样),那么您也可以考虑使用<代码> BITSET 而不是使用<代码> HASSETSE< /COD>。
List<Integer> blueParts;
trainMap().values().stream().filter(part -> {
     boolean found = false;
     for (Long part : train.getTrainParts()) {
         if (blueParts.conatins(part)) {
              found = true;
         }
     }
     return found;
).collect(Collectors.toList());
 tagDataContainer.getDeliveryGroupMap().values().stream().filter(dg -> {
                Sets.SetView<Long> intersection = Sets.intersection(Sets.newHashSet(dg.getPlacements()), Sets.newHashSet(placementsToChangeStatusToPublish));
                return intersection.size()>0;
       }
 );
List<Train> = 
    trainMap().values()
              .stream()
              .filter(t-> t.getTrainParts().stream().anyMatch(p->blueParts.contains(p)))
              .collect(Collectors.toList());