猿问

在较少的代码中使用 java 流转换和访问对象的属性

可以使用java流以更好、更精确的方式重写这段代码吗?我有一个对象数组IModel<?>[] models,在访问地图中的属性之前,我需要将其转换为实际的对象类。


List<String> testStrs = Arrays.stream(models)

.map(item -> {

  TestClass testClass = (TestClass) item;

  return testClass.getStatus();

})

.collect(Collectors.toList())

注:仅供个人对流的理解。请考虑IModel<?>[] models将始终具有TestClass类型的对象。我很清楚如果我们没有任何适当的检查,转换会有多危险。


蓝山帝景
浏览 128回答 2
2回答

慕标5832272

只需避免中间 testClass 变量即可。List<String> testStrs = Arrays.stream(models).map(item -> ((TestClass) item).getStatus()).collect(Collectors.toList())

拉莫斯之舞

您应该能够使用以下内容。注意我添加了一个实例检查以确保它可以投射。使用方法引用可以提高代码的清晰度。List<String>&nbsp;testStrs&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Arrays.stream(models) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(TestClass.class::isInstance) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(TestClass.class::cast) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(TestClass::getStatus) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());
随时随地看视频慕课网APP

相关分类

Java
我要回答