java一个列表,根据列表里面对象的属性,执行不同的方法,怎么写最优雅
时间: 2024-03-05 22:51:45 浏览: 11
可以使用 Java 8 引入的 Stream API 和 Lambda 表达式来实现此需求,代码如下:
```java
// 假设列表中的对象类型为 MyObject,有一个属性 type 表示类型
List<MyObject> list = ...;
list.stream()
.forEach(obj -> {
if (obj.getType() == 1) {
// 执行方法1
} else if (obj.getType() == 2) {
// 执行方法2
} else if (obj.getType() == 3) {
// 执行方法3
} else {
// 其他情况
}
});
```
上述代码使用了 `stream()` 方法将列表转换为流,然后使用 `forEach()` 方法遍历流中的每个元素,使用 Lambda 表达式根据对象的类型执行不同的方法。
如果希望将不同类型的对象分别处理,可以使用 `groupingBy()` 方法将它们分组,代码如下:
```java
Map<Integer, List<MyObject>> map = list.stream()
.collect(Collectors.groupingBy(MyObject::getType));
List<MyObject> type1List = map.get(1);
// 执行方法1
List<MyObject> type2List = map.get(2);
// 执行方法2
List<MyObject> type3List = map.get(3);
// 执行方法3
List<MyObject> otherList = map.getOrDefault(0, Collections.emptyList());
// 其他情况
```
上述代码使用了 `groupingBy()` 方法将列表中的对象按照类型分组,然后使用 `get()` 方法获取每个类型对应的对象列表,并执行相应的方法。如果不存在某个类型的对象,则使用 `getOrDefault()` 方法返回一个空列表。