Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t work.toSet()在Java中创建集合?_Java_Collections - Fatal编程技术网

为什么';t work.toSet()在Java中创建集合?

为什么';t work.toSet()在Java中创建集合?,java,collections,Java,Collections,我想从特定键的属性创建一个值集合。这些方法的工作原理如下: Collection<String> getValueOfKey(final Collection<Localization> input, final String key) { return input.stream().map(l -> { return l.getProperties(); }).map(p -> {

我想从特定键的属性创建一个值集合。这些方法的工作原理如下:

Collection<String> getValueOfKey(final Collection<Localization> input, final String key) {
        return input.stream().map(l -> {
            return l.getProperties();
        }).map(p -> {
            return p.getProperty(key, "");
        }).collect(Collectors.toList());
    }

下面是测试内容的屏幕截图:

基于您发布的错误链接(
预期iterable包含[“foo1”,“bar1”],但项目0是“bar1”
),断言预期两个值以指定顺序出现(首先是“foo1”,然后是“bar1”),但
设置
s不维护顺序,以及“bar1”在迭代
集合时首先出现,因此断言失败

因此,问题在于断言,而不是使用
toSet()


例如,如果使用
LinkedHashSet
(将
toSet()
替换为
toCollection(LinkedHashSet::new)
),则可以根据插入顺序强制对
集进行迭代。这将确保断言不会失败。

使用
Collectors.toSet()
肯定会生成
集合
Collection set=new ArrayList().stream().collect(Collectors.toSet())。其他地方有个问题。您能详细描述一下使用
toSet()
时出现的问题吗?这三个断言都失败了?只有一个?我添加了一个测试失败的屏幕截图看起来更像你的问题是,你应该使用
containsInAnyOrder
而不是
contains
“砰砰的一声放在我桌上”哦!非常感谢。或者更好的是,使用而不是。
public class RowCreatorTest {
private final Properties fixturePropertieDe = new Properties();
private final Properties fixturePropertieEn = new Properties();
private final Localization de = new Localization(Languages.GERMAN, fixturePropertieDe);
private final Localization en = new Localization(Languages.ENGLISH, fixturePropertieEn);

private final RowCreator sut = new RowCreator();

@Before
public void prepareFixtures() {
    fixturePropertieDe.put("key1", "foo1");
    fixturePropertieDe.put("key3", "foo3");

    fixturePropertieEn.put("key1", "bar1");
    fixturePropertieEn.put("key2", "bar2");
}

@Test
public void getValueOfKey() {
    assertThat(sut.getValueOfKey(Arrays.asList(de, en), "key1"), contains("foo1", "bar1"));
    assertThat(sut.getValueOfKey(Arrays.asList(de, en), "key2"), contains("", "bar2"));
    assertThat(sut.getValueOfKey(Arrays.asList(de, en), "key3"), contains("foo3", ""));
}