假设我有一个对对象进行转换而不返回任何值的空方法,我想在stream map()函数的上下文中使用它,如下所示:
public List<MyObject> getList(){
List<MyObject> objList = ...
return objList.stream().map(e -> transform(e, e.getUuid())).collect(Collectors.toList());
}
private void transform(MyObject obj, String value){
obj.setUuid("prefix" + value);
}
这个例子是为了简单起见——实际的方法不仅仅是搞乱对象的UUID。
不管怎样,在上面这样的场景中如何使用空方法?当然,我可以让该方法返回转换后的对象,但这不是重点,并且违反了设计(该方法应该是空的)。
如果您确定这是您要做的,请使用peek而不是map
除了Eugene的答案之外,您还可以使用以下内容:
objList.stream()
.map(e -> {
transform(e, e.getUuid());
return e;
}).collect(Collectors.toList());
实际上,您不想转换当前元素并将其收集到一个新的List
中。
相反,您希望为列表中的每个条目应用一种方法。
因此,您应该使用Collection::forEach并返回列表。
List<MyObject> objList = ...;
objList.forEach(e -> transform(e, e.getUuid()));
return objList;
这似乎是一个强制使用java 8流的情况。相反,您可以使用forEach实现它。
List<MyObject> objList = ...
objList.forEach(e -> transform(e, e.getUuid()));
return objList;
问题内容: 假设我有一个void方法,该方法只对对象进行转换而没有返回任何值,并且我想在流map()函数的上下文中使用它,如下所示: 该示例是为了简单起见而构成的-实际方法除了在处理对象的UUID之外,还在做其他事情。 无论如何,在上述情况下如何使用void方法?当然,我可以使该方法返回转换后的对象,但这不重要,并且违反了设计(该方法应为空)。 问题答案: 似乎是强制使用Java 8流的情况。相反
本文向大家介绍使用Spark进行实时流计算的方法,包括了使用Spark进行实时流计算的方法的使用技巧和注意事项,需要的朋友参考一下 Spark Streaming VS Structured Streaming Spark Streaming是Spark最初的流处理框架,使用了微批的形式来进行流处理。 提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个RDD,源源不断对RDD进
我有一个BigDecimals(在本例中是)的集合,希望将其添加在一起。有没有可能使用流来实现这一点? 我注意到类有几个方法 每一个都有一个方便的方法。但是,正如我们所知,和算术几乎总是一个坏主意。 那么,有没有方便的方法来求和BigDecimals呢? 这是我目前掌握的代码。 为后人编辑后答案: 这两个答案都非常有用。我想补充一点:我的实际场景不涉及原始的集合,它们包装在发票中。但是,我能够修改
我正在尝试使用java类来映射cassandra表以触发rdd,为此我面临一个问题,即cassandra无法创建查询来获取数据。 根据这个链接https://github.com/datastax/spark-cassandra-connector/blob/master/doc/6_advanced_mapper.md,类必须是可序列化的,并且至少对要映射的表的主键列具有“getter”和“se
问题内容: 是否可以使用Java在Android中进行方法转换?我想拦截一个系统方法并记录其参数,然后正常处理 问题答案: 我认为在任何环境下都不能使用Java使用该技术。 也许您可以使用AOP获得类似的结果。 但是,您只能在Android上执行此操作。参见android中面向方面的编程。实际上,由于您不会编译目标代码(系统方法),因此在这种情况下,编译时编织(似乎是您可以在Android上使用的
在流API中映射对象的更好实践是什么? 1-带有方法引用的后续map(): 为什么呢?