Java 8中的peek和map 在Java 8中,peek和map是Stream API中的两个方法,它们都可以在流的操作中起到类似的作用,但又有一些不同之处。 peek方法可以在流的每个元素上执行一个操作,并返回一个与原始流相同的新流。这个操作可以是一个打印语句、一个日志记录或任何其他你想要执行的操作。它通常用于调试或观察流的中间结果,而不会对流的元素进行任何修改。 map方法可以将流的每个元素映射到另一个值。这个映射可以是一个函数,它将一个元素转换为另一个元素,也可以是一个方法引用或Lambda表达式。map方法会返回一个新的流,其中包含映射后的元素。 所以,peek方法主要用于观察流的中间结果,而map方法则用于进行元素的转换。它们在使用时需要根据具体的需求选择合适的方法。
Java 8中的peek和map 在Java 8中,peek和map是Stream API中的两个方法,它们都可以在流的操作中起到类似的作用,但又有一些不同之处。 peek方法可以在流的每个元素上执行一个操作,并返回一个与原始流相同的新流。这个操作可以是一个打印语句、一个日志记录或任何其他你想要执行的操作。它通常用于调试或观察流的中间结果,而不会对流的元素进行任何修改。 map方法可以将流的每个元素映射到另一个值。这个映射可以是一个函数,它将一个元素转换为另一个元素,也可以是一个方法引用或Lambda表达式。map方法会返回一个新的流,其中包含映射后的元素。 所以,peek方法主要用于观察流的中间结果,而map方法则用于进行元素的转换。它们在使用时需要根据具体的需求选择合适的方法。
我有以下案例:有一个对象列表-ProductData,其中包含几个字段:
public class ProductData { .... private String name; private String xref; //getters //setters }
还有一个API,返回以下对象列表:
public class RatingTableRow { private String planName; private String planXref; private int fromAge; private int toAge; private int ratingRegion; //constructor //getters //setters }
但它返回的对象中的plan name字段为空,因为在提取该对象期间不允许使用。我需要通过xref将product data与RatingTableRow关联起来,以便将plan name设置到RatingTableRow中,因为我之后需要使用该对象,所以我创建了以下代码来实现这一点:
MapproductByXref = plans.stream() .collect(toMap(ProductData::getInternalCode, Function.identity())); return getRatingTableRows(...).stream .filter(ratingRow -> productByXref.containsKey(ratingRow.getPlanXref())) .peek(row -> { ProductData product = productByXref.get(row.getPlanXref()); row.setPlanName(product.getName()); })....;
我知道Java文档说peek
不适合这些需求,但希望得到您在如何以更正确的方式完成这个任务的建议。