我正在尝试使用以下签名实现一个方法:
public static <A,B> Pair<Stream<A>, Stream<B>> flatten(Iterator<Pair<Stream<A>, Stream<B>>> iterator);
Run Code Online (Sandbox Code Playgroud)
方法的目标是将每个流类型展平为单个流并将输出包装成一对.我只有一个迭代器(不是Iterable),我不能改变方法签名,所以我必须在一次迭代中执行展平.
我目前最好的实施是
public static <A,B> Pair<Stream<A>, Stream<B>> flatten(Iterator<Pair<Stream<A>, Stream<B>> iterator) {
Stream<A> aStream = Stream.empty();
Stream<B> bStream = Stream.empty();
while(iterator.hasNext()) {
Pair<Stream<A>, Stream<B>> elm = iterator.next();
aStream = Stream.concat(aStream, elm.first);
bStream = Stream.concat(bStream, elm.second);
}
return Pair.of(aStream, bStream);
}
Run Code Online (Sandbox Code Playgroud)
虽然这在技术上是正确的,但我对此并不十分满意,原因有两个:
感觉Stream#flatMap应该适合这里(在使用Guava的Streams.stream(Iterator)将输入Iterator转换为Stream之后,但由于中间的Pair类型,它似乎不起作用.
另外一个要求是任何迭代器/流可能非常大(例如,输入可能包含从一对极大的流到一个项目流中的许多流的任何地方),因此理想情况下,解决方案不应包含收集结果. - 记忆收藏.
编辑3
我安装了新版本的eclipse(Mars - 4.5.0),一切正常.但是,当我通过Eclipse Marketplace重新安装Scala时,问题再次出现.那么也许它是scala插件的东西?
编辑2
我正在玩它更多,发现如果我删除某些包,功能返回.具体来说,如果我删除包functional and io,则运行整个项目的测试的能力将返回.重命名包没有帮助,只删除它们.此外,如果我在这些包中添加JUnit测试,我仍然无法通过运行整个包通过包浏览器运行该测试.
我在Eclipse中遇到了一个特定Java项目的问题.当我尝试从项目资源管理器(通过[right click on project folder] --> run as --> JUnit Test)运行所有JUnit测试时,我收到许多人似乎看到的错误消息:
问题启动JUnit测试:测试运行'JUnit 4'没有找到测试
单击消息上的"确定"将显示"运行配置"对话框.
奇怪的是,在整个项目范围内,该项目似乎非常孤立.我可以毫无困难地做到以下几点:
我已经尝试过类似帖子中提到的标准内容,似乎没什么用.具体来说,我试过了:
另外,我清楚地记得这个功能在不久前用于这个项目,但是不记得确切的时间.所以我必须添加/更改/删除导致错误出现的内容.
编辑@ Durron597的建议: 不幸的是,没有任何建议有效.我还尝试删除每个JUnit运行配置并再次尝试创建配置过程,仍然没有运气.
我的eclipse版本是:Luna Service Release 2(4.4.2)
我的JUnit版本是:4.11
这是一个测试的代码:
package common;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashSet;
import org.junit.Test;
public class UtilTest {
@Test
public void testWrappers(){
short[] s = {1,2,3,4};
Short[] s2 = Util.boxArr(s); …Run Code Online (Sandbox Code Playgroud) 我正在用 Coffeescript 开发一个 Pixi.js 游戏,主要关注旋转六边形。在动画旋转和识别旋转的底层板状态方面,关于旋转的一切都正常工作。但是,对于棋盘上的某些六角形(并非全部),旋转它们会导致舞台上的其他(并非所有)精灵“抖动”。它们会暂时移到一边,然后在旋转完成后再次移回。我试过到处寻找问题;我发现的一个结果是有人在不同的网站上有类似的问题,但没有答案:here。
我不确定在自己诊断错误方面从哪里开始。如果这是画布的问题,我可以在那里查看,但也可能是 Pixi 问题。这是问题的 gif。当我单击第一个十六进制(右侧)时,许多线条都会抖动。当我点击第二个十六进制(左)时,他们没有。
就代码而言,该项目在这一点上相当大。这是动画函数和辅助方法:
## The frame count the window is on ##
@count = 0
### Moves the connector to the correct lit layer ###
@toLit = (connector) ->
try
@colorContainers[connector.color].unlit.removeChild(connector.panel)
catch
if @typeIsArray connector.color
if connector.color.length > 0
c = connector.color[0].toUpperCase()
else
c = Color.asString(Color.NONE).toUpperCase()
else
c = connector.color.toUpperCase()
if c is Color.asString(Color.NONE).toUpperCase()
@toUnlit(connector) ## Prevent lighting of color.NONE
else
@colorContainers[c.toUpperCase()].lit.addChild(connector.panel)
connector.linked = true
return
### Moves the connector to …Run Code Online (Sandbox Code Playgroud) 您好我发现了一个与收藏相关的问题.
public class Person {
private String name;
public Person(String name){
this.name=name;
}
public boolean equals(Object o){
if(!(o instanceof Person))return false;
Person p=(Person)o;
return p.name.equals(this.name);
}
public static void main(String[] args) {
HashSet<Person> hs=new HashSet<Person>();
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
System.out.println("Elements"+hs.size());
}
}
Run Code Online (Sandbox Code Playgroud)
Hashset的大小为4.但不是必须为1吗?由于equals方法已经实现,HashSet是否可以包含多个具有相同名称的Person对象?
所有Person对象是否都具有相同的哈希码,因为hashCode方法没有被覆盖?
java ×3
canvas ×1
coffeescript ×1
collections ×1
eclipse ×1
java-8 ×1
java-stream ×1
junit ×1
pixi.js ×1
rotation ×1
scala ×1