java - 在Java中,如何根据其任何属性过滤类实例列表以在流或一行中获取另一个
问题描述
如何使用流或任何其他方式在一行中写入而不是 for 循环来过滤它。
class Attribute {
String name;
String value;
..
//getter-setter
}
.. main
List<Attribute> list = populateAttributes();
for (Attribute attr : list) {
if (attr.name == "some key") {
return attr.value;
}
}
我有兴趣在 1 行中这样做,因为我将从配置中读取该路径,并且我的通用代码将遍历点序列并使用反射调用方法。所以像这样classpackage.getAttributes...(getValue where attr.getname == "somekey")
解决方案
您可以使用 Stream.filter() 过滤具有属性名称与您的键匹配的属性的列表并找到第一个属性:
Optional<Attribute> attributeOptional = list.stream().filter(attr-> "some key".equals(attr.name).findFirst();
编辑:如果你想要属性的值,那么你可以使用 Optional.map() 将找到的属性映射到它的值,如果没有找到,那么一些默认值,比如 null。
String value = list
.stream()
.filter(attr-> key.equals(attr.name))
.findFirst()
.map(attribute -> attribute.value)
.orElse(null);
推荐阅读
- python - 使用字典转换熊猫系列中列表的元素
- c - 如何设置 Gearmenu 的一个元素不敏感?
- javascript - Google Map API Zoom plus 和 minus 图标未显示
- reactjs - useEffect Hook 示例:导致重新渲染的原因是什么?
- javascript - Knex 操作抛出异常
- php - 使用 PHP 将字符串视为多维数组
- vba - 在 PowerPoint for Mac 中安排 VBA 代码
- maven - SpringBoot 项目,application.yml 中的环境变量始终为空
- angular - 如何在 ngSwitchCase 中使用常量
- tarantool - 如何一次从 tarantool 中选择多个键,例如 SQL 中的 SELECT IN?