gpt4 book ai didi

java - 为什么 .toSet() 在 Java 中创建集合不起作用?

转载 作者:行者123 更新时间:2023-11-30 06:52:18 28 4
gpt4 key购买 nike

我想根据特定键的属性创建一个值集合。这些方法是这样工作的:

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());
}

首先我想使用 Collectors.toSet() 而不是 Collectors.toList() 但后来我得到了错误的结果(它只是给了我 zh).有人知道为什么我不能使用 .toSet() 吗?

这是我的测试代码:

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", ""));
}

这是测试内容的屏幕截图:test screenshot

最佳答案

基于指向您发布的错误的链接(预期包含 ["foo1","bar1"] 但项目 0 为“bar1”),断言预期这两个值出现在指定的顺序(首先是“foo1”,然后是“bar1”),但是 Set 不保持顺序,并且在遍历 Set 时首先出现“bar1”,所以断言失败。

因此问题出在断言上,而不是在 toSet() 的使用上。

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

关于java - 为什么 .toSet() 在 Java 中创建集合不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119436/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com