gpt4 book ai didi

Java - 返回特定类型 T 的所有对象的集合,其中 T 被传递给方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:46 24 4
gpt4 key购买 nike

我正在寻找编写一个方法,给定原始集合 A 和类型 T 返回一个新集合,其中包含 A 中类型 T 的所有对象。

我已经使用 Person 类及其子类 ManWoman 以及用于容纳 Person 对象集的 World 类设置了测试。

public class World {

public World() {
this.people = new HashSet<Person>();
}

public void addPerson(Person person) {
getAllPeople().add(person);
}

public void removePerson(Person person) {
getAllPeople().remove(person);
}

public Set<Person> getAllPeople() {
return people;
}

public <T> Set<T> getAllPeople(Class<T> cls) {
Set<T> ItemsOfClass = new HashSet<>();
// Incompatible type error on next line
ItemsOfClass = getAllPeople().stream().filter(object -> object.getClass().equals(cls)).collect(Collectors.toSet());
return ItemsOfClass;
}

public Set<Person> people;
}

所以我希望 getAllPeople(Man.class) 返回一组新的 Man 对象。

我当前的 getAllPeople 实现基于以下答案:https://stackoverflow.com/a/17840541
https://stackoverflow.com/a/16727596
尽管我无法弄清楚它们应该如何组合在一起(如果有的话)。

我不擅长泛型,因此欢迎任何和所有解释/建议。

最佳答案

您有一个Stream<Person>您正在尝试将其收集到Set<T>中。但是一个Stream<Person>将产生 Set<Person> .

您可以映射您的 Person实例到T实例并获得 Stream<T> .

public <T> Set<T> getAllPeople(Class<T> cls) {
Set<T> itemsOfClass = getAllPeople().stream()
.filter(cls::isInstance)
.map(cls::cast)
.collect(Collectors.toSet());
return itemsOfClass;
}

这使用cls::isInstance作为查找类 cls 的元素的谓词,和cls::cast作为映射器将您的元素视为 T实例而不是 Person实例。

关于Java - 返回特定类型 T 的所有对象的集合,其中 T 被传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50451496/

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