我有以下情况:有一个对象列表-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
}
但它会返回带有空计划名称字段的对象,因为在提取此对象期间不允许使用该名称。我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置为RatingTableRow,因为稍后需要使用此对象,因此我创建了以下代码来做到这一点:
Map<String, ProductData> productByXref = 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
不满足这些需求,但希望获得有关如何以更正确的方式完成此任务的建议。
有peek
记录在案的原因 主要是出于调试目的 。
最终在内部进行处理的某些内容peek
可能根本不符合终端操作的条件,并且流仅由终端操作执行。
首先假设一个简单的例子:
List<Integer> list = new ArrayList<>();
List<Integer> result = Stream.of(1, 2, 3, 4)
.peek(x -> list.add(x))
.map(x -> x * 2)
.collect(Collectors.toList());
System.out.println(list);
System.out.println(result);
一切看起来都很好吧?因为在这种情况下peek
将运行 所有元素 。但是,当您添加一个filter
(然后忘了peek
做什么)时会发生什么:
.peek(x -> list.add(x))
.map(x -> x * 2)
.filter(x -> x > 8) // you have inserted a filter here
您正在peek
为每个元素执行,但不 收集任何 元素。您确定要吗?
这可能会变得更加棘手:
long howMany = Stream.of(1, 2, 3, 4)
.peek(x -> list.add(x))
.count();
System.out.println(list);
System.out.println(howMany);
在Java-8中,该列表已填充, 但在jdk-9中 peek
根本没有调用。由于您未使用filter
或未flatmap
修改Stream
count
的大小,只需要它的大小即可; 因此根本不用偷看 。因此,依靠peek
是一个非常糟糕的策略。
问题内容: 我有一个服务器,我想在读取字节之前先查看一下它,以检查它是客户端尝试使用的纯文本协议还是SSL / TLS。 检查http://golang.org/pkg/net/,似乎该界面没有类似的内容。我知道我可以使用,但是我想通过TLS Conn来证明客户端使用的是SSL / TLS,并且可以从原始目录中读取,因此握手将失败。 那么,有什么方法可以窥探Go语言(类似于C / C ++套接字)
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 本文档将通过介绍Scrapy背后的概念使您对其工作原理有所了解, 并确
我试图对对象中的每个条目执行映射操作。 我需要从键中去掉前缀,并将值从一种类型转换为另一种类型。我的代码从 映射实例并使用,这看起来很难看。 还有更好的选择吗?使用for循环似乎更好: 我应该避免使用流API吗?还是我错过了更好的方式?
我试图使用
我有多个消息在我的服务总线主题,我想处理这个消息一个一个,在一个服务总线触发器,它应该得到所有的消息,没有被处理。而且由于我正在进行测试和调试,我不希望消息被完成,也就是说,如果它没有完成,它会留在主题中供任何其他服务使用。 我已经开始使用带有服务总线主题触发器的Azure功能应用程序,并且已经向上移动到这里,在这里我获得了我日志中的所有消息,但是一旦完成,我没有获得任何其他消息,因为所有消息都已
我试图翻译这个(简化)代码使用Java-8流: 以下是我尝试过的: 但以上给出了所有