gpt4 book ai didi

java - 在实体集合中查找所有 id 集合的最有效方法

转载 作者:IT老高 更新时间:2023-10-28 20:57:16 29 4
gpt4 key购买 nike

我有一个实体:

public class Entity
{
private long id;
private String data;

public long getId() {
return id;
}

public String getData() {
return data;
}
}

以及实体的集合:

Collection<Entity> entities= ...

找到Collection<Long> 的最有效方法是什么? entities 中的所有 id ?

最佳答案

假设你有

class Entity {
final long id;
final String data;

public long getId() {
return id;
}

public String getData() {
return data;
}

Entity(long id, String data) {
this.id = id;
this.data = data;
}
}

在 Java 8 中你可以编写

Collection<Entity> entities = Arrays.asList(new Entity(1, "one"), 
new Entity(11, "eleven"), new Entity(100, "one hundred"));
// get a collection of all the ids.
List<Long> ids = entities.stream()
.map(Entity::getId).collect(Collectors.toList());

System.out.println(ids);

打印

[1, 10, 100]

您可以想象,这在 Java 7 或更低版本中相当难看。注意 Entity.getId 在应用于 map() 时意味着在每个元素上调用此方法。

现在,真正有趣的部分是你可以做到这一点。

List<Long> ids = entities.parallelStream()
.map(Entity::getId).collect(Collectors.toList());

大多数情况下使用并行流会损害性能,但它使尝试并看到非常容易(可能太容易;)


最有效的方法是拥有或构建 map 。

Map<Long, Entity> entitiesMap = ...
// get all ids
Collection<Long> addIds = entitiesMap.keySet();

// look up entities by id.
List<Long> ids = ...
List<Entity> matching = new ArrayList<>();
for(Long id: ids)
matching.add(entitiesMap.get(id));

关于java - 在实体集合中查找所有 id 集合的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812947/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com