Flutter中如何基于Orders对象的orderType字段过滤PointOfServices列表
需求可行性及实现方案
这个需求完全可行,核心逻辑是两步过滤:先为每个服务点筛选出orderType为inventory的订单,再剔除掉没有符合条件订单的服务点,最终得到符合要求的服务点列表。
Python 实现示例
假设数据结构如下(模拟你的业务对象):
class Order: def __init__(self, order_type): self.orderType = order_type class PointOfService: def __init__(self, orders): self.orders = orders # 模拟输入的服务点列表 pos_list = [ PointOfService([Order('inventory'), Order('delivery')]), PointOfService([Order('delivery')]), PointOfService([Order('inventory')]) ]
过滤实现代码:
filtered_pos = [] for pos in pos_list: # 筛选当前服务点中符合条件的订单 valid_orders = [order for order in pos.orders if order.orderType == 'inventory'] # 只有当存在有效订单时,才保留该服务点(并更新其订单列表) if valid_orders: pos.orders = valid_orders filtered_pos.append(pos) # 验证结果 for item in filtered_pos: print([o.orderType for o in item.orders]) # 输出结果: ['inventory'], ['inventory']
Java 实现示例
假设业务实体类定义如下:
class Order { private String orderType; public Order(String orderType) { this.orderType = orderType; } public String getOrderType() { return orderType; } } class PointOfService { private List<Order> orders; public PointOfService(List<Order> orders) { this.orders = orders; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } }
过滤逻辑实现:
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class PosFilterDemo { public static void main(String[] args) { // 模拟输入的服务点列表 List<PointOfService> posList = new ArrayList<>(); posList.add(new PointOfService(List.of(new Order("inventory"), new Order("delivery")))); posList.add(new PointOfService(List.of(new Order("delivery")))); posList.add(new PointOfService(List.of(new Order("inventory")))); List<PointOfService> filteredPosList = new ArrayList<>(); for (PointOfService pos : posList) { // 过滤当前服务点的有效订单 List<Order> validOrders = pos.getOrders().stream() .filter(order -> "inventory".equals(order.getOrderType())) .collect(Collectors.toList()); // 仅保留包含有效订单的服务点 if (!validOrders.isEmpty()) { pos.setOrders(validOrders); filteredPosList.add(pos); } } // 打印验证结果 filteredPosList.forEach(pos -> pos.getOrders().forEach(order -> System.out.println(order.getOrderType())) ); // 输出结果: inventory, inventory } }
注意事项
- 如果你不想修改原
PointOfService对象,可以创建新的对象实例,将过滤后的订单列表传入新对象,避免对原数据造成影响。 - 其他编程语言(如JavaScript、C#)的实现逻辑完全一致:先处理每个服务点内的订单过滤,再过滤掉无有效订单的服务点。
内容的提问来源于stack exchange,提问作者Dean Ball
相关产品推荐
相关产品推荐

