list.stream().map(SuperviseAudit::getProjectId).collect(Collectors.toList());怎么防止有重复元素
时间: 2024-04-23 20:27:51 浏览: 90
要防止在使用 Stream 的 map 操作后出现重复元素,可以使用 `distinct` 方法来去重。下面是一个示例:
```java
List<Long> distinctList = list.stream()
.map(SuperviseAudit::getProjectId)
.distinct()
.collect(Collectors.toList());
```
在上述示例中,`distinct` 方法会确保最终收集的列表中不会有重复的元素。它会对流中的元素进行去重操作,只保留第一次出现的元素,后续重复的元素将被过滤掉。
注意,为了使 `distinct` 方法生效,需要确保 `SuperviseAudit::getProjectId` 方法正确地实现了 `equals` 和 `hashCode` 方法,以便正确地判断元素是否重复。
相关问题
List<String> realValueFieldIds = accountFieldCollectionMap.values().stream().map(ConfAccountField::getFieldRelation).collect(Collectors.toList()); Map<String, ConfAccountField> fieldMap = MapUtil.transformUniqueIndexMap(confAccountFieldMap.values(), ConfAccountField::getFieldId); List<ConfAccountField> realSiteFields = realValueFieldIds.stream().map(fieldMap::get).filter(Objects::nonNull).distinct().collect(Collectors.toList());
这段代码使用了Java 8的Stream API,主要是对一些集合进行操作。具体来说,代码首先从一个名为accountFieldCollectionMap的Map中取出所有的值,即一个ConfAccountField对象的集合,然后对每个对象调用getFieldRelation方法,获取其关联的字段的ID,并将这些ID收集到一个List<String>中。
接下来,代码将confAccountFieldMap的所有值转化为一个Map<String, ConfAccountField>,其中键为ConfAccountField对象的getFieldId方法返回的ID,值为ConfAccountField对象本身。然后,代码从realValueFieldIds中取出每个ID,通过get方法从fieldMap中获取相应的ConfAccountField对象,如果对象存在且没有重复,则将其收集到一个List<ConfAccountField>中。
综上所述,这段代码的作用是根据一个Map中ConfAccountField对象的关联字段的ID,获取所有对应的ConfAccountField对象,并去除重复的对象。
list.stream().map(this::entityVO).collect(Collectors.toList());
你的代码是使用 Java 8 中的流式操作对一个列表进行转换,将每个元素通过 this::entityVO 方法映射为另一个对象,最后将结果收集到一个新的列表中。这里使用了方法引用语法,this::entityVO 表示引用当前对象的 entityVO 方法。然后通过 collect(Collectors.toList()) 将流中的元素收集到一个列表中返回。
阅读全文