是否可以在Java 8中强制转换流?假设我有一个对象列表,我可以做这样的事情来过滤掉所有其他对象:
Stream.of(objects).filter(c -> c instanceof Client)
Run Code Online (Sandbox Code Playgroud)
在此之后,如果我想对客户做一些事情,我需要投下每个客户:
Stream.of(objects).filter(c -> c instanceof Client)
.map(c -> ((Client) c).getID()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这看起来有点难看.是否可以将整个流转换为其他类型?像流延Stream<Object>
到Stream<Client>
?
请忽略这样的事实,即做这样的事情可能意味着糟糕的设计.我们在计算机科学课上做这样的事情,所以我正在研究java 8的新功能,如果可能的话,我很好奇.
我只有大约半年的java经验,所以请原谅我缺乏知识.我尝试了一些谷歌搜索,我对此有一些想法,我需要填写几个漏洞.
我正在尝试为我正在做的程序创建一个"动态工厂".这样做的基础是我希望人们能够将类文件插入到文件夹中,然后将它们加载到我的工厂中以便稍后创建它们的新实例.
这就是我现在所拥有的:
import java.util.HashMap;
import java.util.Map;
public class KitManager {
private Map<String, Class<? extends Kit>> kitMap;
public KitManager() {
kitMap = new HashMap<String, Class<? extends Kit>>();
}
public Kit makeKit(String kitname) {
try {
return kitMap.get(kitname).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我要弄清楚的是如何获取文件夹中的所有类,确保它们扩展Kit,然后将它们插入到Map中以便稍后创建它们的实例.这就是我被卡住的地方,我想不出一个好的方法将类加载到地图中而不需要在配置中的某个地方标识类名和查找字符串.我的想法是在每个类中都有静态代码将自己插入到HashMap中,但我不确定这是如何工作的.我真正要求的是关于如何实现我的目标的想法.(有一个用户可以输入类的文件夹(扩展Kit),然后在我的程序加载时将这些类动态加载到我的kitMap中)