使用Java 8流从List <Object>,List <Object>转换为List <AnotherObject>

NSN:

我有2个相同类型的清单说

class Orders {
    Strig User;
    String tradeDate;
    BigDecimal Qty;
}

比较之后,我想转换为另一个对象的列表说

class DiffOrders {
        String User;
        String tradeDate;
        BigDecimal currentQty;
        BigDecimal prevQty;
    }

我有两个订单清单

List<Orders>currentOrders;
List<Orders>prevOrders;

   List<Orders> DiffOrders = current.stream()
                                       .filter(curr->previous.stream().anyMatch(prev->OrderPredicate.orderDiffSize(curr, prev)))
                                       .collect(Collectors.toList());

对于同一日期的订单和同一用户,我想捕获匹配订单中的数量。

我能够找到List<Orders>匹配的。但不确定如何捕获并转换为List<DiffOrders>新类。能否请你帮忙?

编辑1:OrderPredicate.orderDiffSize是一个简单函数,用于比较当前和先前订单的用户,交易日期,数量和符号(+表示卖出,-表示买入)。为了简洁起见,此处未提供。

编辑2:上一个/当前列表的大小合理,可以忽略o log n计算问题。

编辑3:删除方向以保持简单。例如,我分别在7月1日,7月2日,7月3日的prevOrders和CurrentOrders中拥有订单。如果同一天的订单数量不同,我想将其放入DiffOrders中,数量与当前和之前的数量相同。希望这一点可以弄清楚。

雅各布:

听起来这个问题的症结在于,您要忽略current其中没有匹配项的任何项目previous,而要使用中的实际对应值转换确实具有匹配项的项目previous在那种情况下flatMap就是你想要的。您可以使用flatMap将每个值Order都不转换成DiffOrders,而是将其转换成一个DiffOrders对于不匹配项将为空,并由一个用于匹配项的元素组成。

List<DiffOrders> matchedOrders = current.stream()
    .flatMap(curr -> {
      Optional<Order> p = previous.stream()
          .filter(prev -> OrderPredicate.orderSameDirectionAndSize(curr, prev))
          .findFirst();
      if (p.isPresent() && !p.get().qty.equals(curr.qty)) {
        return Stream.of(new DiffOrders(curr.user, curr.tradeDate, curr.qty, p.get().qty));
      } else {
        return Stream.empty();
      }
    }) 
    .collect(Collectors.toList());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此Java 8流操作求值为Object而不是List <Object>或只是List?

将类型Object转换为List <Object>

Java 8收集器的问题类型不匹配:无法从List <Object>转换为List <String>

在Java中将List <Object>转换为String []

将List <HashMap <String,Object >>转换为流

Java:使用流将List <Object>转换为另一个List <anotherObject>

将Collection <Object>转换为List <String>

将List <Object>转换为List <CustomClass>

java流List <Object []>映射到Map <Object,List <Object [] >>

在Java 8流中将list <Object>转换为<Id>的数组

使用Java 8流将对象列表转换为Map <Key,List <Object >>

使用Java 8流API将List <Map <String,Object >>转换为Map <String,List <Map <String,Object >>>

将List <Object []>数组转换为对象

将List <List <object >>转换为List <List <string >>

将List <List <Object >>转换为Map <Object,List <Object >> Java8

Java将List <Vehicle>转换为List <Object>

将list <object>转换为键值对

如何在Java中将List <Object>转换为List <Dog>

Java如何将List <Object []>转换为String []

如何使用Streams和Lambda Java8将List <Object []>转换为Map <String,BigInteger>

将IList <IList <object >>转换为List <List <object >>形式

尝试将List <object>转换为数组

将List <object>转换为Objects的类:List <object>

Java - 将 List<Object> 转换为 List<Entity>

使用 Java 8 将 Map<Object,Map<Object,List<Object>>> 转换为 Set<Object>

如何将 Future<List<Object>> 转换为 List<Object>?

将枚举转换为 List<object>

从 List<Object[]> 到 List<MyDTO> 的 Java 流

基于 List<Object> 创建 Map<Key,Object> - 将循环转换为 Java 流