小编Msh*_*nik的帖子

Java flatmap Iterator <Pair <Stream <A>,Stream <B >>>对<Stream <A>,Stream <B >>

我正在尝试使用以下签名实现一个方法:

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)

虽然这在技术上是正确的,但我对此并不十分满意,原因有两个:

  1. Stream.concat警告不要这样做,因为它可能导致StackOverflowError.
  2. 在风格上,我宁愿它是纯粹的功能,如果可能的话,而不是必须遍历迭代器并重新分配流.

感觉Stream#flatMap应该适合这里(在使用Guava的Streams.stream(Iterator)将输入Iterator转换为Stream之后,但由于中间的Pair类型,它似乎不起作用.

另外一个要求是任何迭代器/流可能非常大(例如,输入可能包含从一对极大的流到一个项目流中的许多流的任何地方),因此理想情况下,解决方案不应包含收集结果. - 记忆收藏.

java java-8 java-stream

14
推荐指数
2
解决办法
1211
查看次数

为什么我不能从Package Explorer运行所有Java JUnit测试? - Scala插件问题

编辑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'没有找到测试

单击消息上的"确定"将显示"运行配置"对话框.

奇怪的是,在整个项目范围内,该项目似乎非常孤立.我可以毫无困难地做到以下几点:

  • 通过打开它并单击顶部的绿色运行按钮,在该项目中运行任何单个测试.
  • 通过右键单击项目资源管理器中的类并选择run作为JUnit Test,在该项目中运行任何单个测试
  • 通过相同的方法在此项目中的任何包中运行所有测试.
  • 通过相同的方法在任何其他项目中运行所有测试.

我已经尝试过类似帖子中提到的标准内容,似乎没什么用.具体来说,我试过了:

  • 重启eclipse
  • 重新启动我的电脑
  • 清理和重建项目
  • 删除项目并从git重新克隆,然后重新添加到eclipse
  • 将@RunWith注释添加到我的测试用例中
  • 确保我的所有测试用例都以"test"开头
  • 而是使用JUnit3
  • 删除所有JUnit运行配置并重新创建此运行配置

另外,我清楚地记得这个功能在不久前用于这个项目,但是不记得确切的时间.所以我必须添加/更改/删除导致错误出现的内容.


编辑@ Durron597的建议: 不幸的是,没有任何建议有效.我还尝试删除每个JUnit运行配置并再次尝试创建配置过程,仍然没有运气.

我的eclipse版本是:Luna Service Release 2(4.4.2)

我的JUnit版本是:4.11

JUnit首选项截图: JUnit首选项截图


这是一个测试的代码:

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)

java eclipse junit scala

5
推荐指数
1
解决办法
1814
查看次数

当其他精灵旋转时,Pixi.js 精灵“摇晃”

我正在用 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)

canvas rotation coffeescript pixi.js

3
推荐指数
1
解决办法
1116
查看次数

在HashSet中包含相等的对象

您好我发现了一个与收藏相关的问题.

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 collections

3
推荐指数
1
解决办法
159
查看次数