我想到的另一个Stackoverflow问题的解决方案是使用Stream.peek操作,但似乎仍然不正确,因为它会改变< code>Stream.peek方法中的状态。
同时在<code>流上研究(这里和这里)。查看用法是否可以改变状态我仍然不完全相信<code>流。peek不应改变状态(包括<code>流
下面是Javadoc所说的:
此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到它们:
然后:
参数:action-在元素从流中消耗时对其执行的非干扰操作。
对于性能良好的无干扰流源,可以在终端操作开始之前修改源,并且这些修改将反映在所覆盖的元素中。从JDK集合返回的所有流,以及大多数其他JDK类,都以这种方式表现良好。
似乎无干扰操作确实包括改变流中集合的状态。
下面是使用< code>Stream.peek的代码。
Map< String, List<Test> > userTests = new HashMap<>();
Map< String, List<Test> > filtered = userTests.entrySet().stream()
.peek( e -> e.setValue( modifyListAndReturnIt( e.getValue() ) ) )
.filter( e -> !e.getValue().isEmpty() ) //check if modified list in peek has been emptied
.collect( Collectors.toMap(p -> p.getKey(), p -> p.getValue() ) );
public static List<Test> modifyListAndReturnIt(List<Test> list){
if (somecondition) list.clear();
return list;
}
1)上面的代码会有什么副作用吗?
2)为什么不这样使用peek。Javadoc似乎不允许这样做。
你似乎做了什么看起来无害,正如Brian Goetz在这里的评论中所说的那样。
现在peek的问题是,如果你在它里面产生副作用,你会期望这些副作用真的发生。所以,假设你想像这样改变某个对象的属性:
myUserList.stream()
.peek(u -> u.upperCaseName())
.count()
在java-8中,你的peek
确实会被调用,在9中 - 它不是 - 没有必要在这里调用peek
,因为无论如何都可以在没有它的情况下计算大小。
在同一条路径上,假设您的终端操作是短路操作,如<code>findFirst-您不会处理源代码的所有元素-您可能只通过管道获得其中的一些元素。
如果你的<code>窥视
那么为什么react调用在此场景中呈现: 有什么想法吗?
我通过使用map函数迭代来显示我的状态,这是一个数组。此外,我有一个按钮,在点击反转数组。 我认为我想做什么是相当明显的。但这对我不起作用,我不知道为什么。我必须单击两次来完成第一次还原,出现了奇怪的情况,即呈现的数组和Chrome中React开发工具在组件状态中显示的数组不匹配。 我无法解释这种行为。我开始认为这与我从道具中获得阵列有关,但我真的不知道。有什么想法吗?
我试图使用反应组件在我的 在下面的例子中,它在不使用状态的情况下工作得很好 https://jsbin.com/paduyarase/edit?html输出 现在我在我的组件中引入usestate。我编译了下面的函数,使用的是javascript,但它不起作用。 此组件不工作https://jsbin.com/hefiretaru/edit?html输出 获取错误 错误:缩小的反应错误#321;参
我对NAT表的理解是 NAT表仅映射(专用IP:端口)->(公用IP:端口) 它不关心协议或套接字连接 主机A关闭套接字并在同一本地端口(100)上打开新监听套接字 但这没用!我发现了其他复杂的实现,但我很好奇这种方式有什么问题。
就这么简单。谢谢你
问题内容: 在这段代码中,当我使用 然后我的应用崩溃了,Logcat说 这是与此代码关联的XML文件 问题答案: 在这段代码中,当我使用TextView text =(TextView)getActivity()。findViewById(R.id.text1) 然后我的应用程序崩溃了,Logcat说这是由以下原因引起的:java.lang.NullPointerException:尝试在空对象引