我正在努力和谷歌搜索,不能得到它的权利。如何用流写这个?
private final ConcurrentMap<UUID, Expression> alleMap = new ConcurrentHashMap<>(1000);
private String[] getAllDatabases()
{
Set<String> allDatabases = new HashSet<>();
for (Entry<UUID, Expression> entry : alleMap.entrySet())
{
allDatabases.add(entry.getValue().getChapter().getDatabaseName());
}
List<String> allDatabasesList = new ArrayList<>(allDatabases);
String[] result = new String[allDatabases.size()];
for (int i=0; i < result.length; i++)
{
result[i] = allDatabasesList.get(i);
}
return result;
}
alleMap.values().stream().???
我需要数组的原因是,我正在编写一个swing应用程序,并且需要joptionpane问题的字符串[]。
2条答案
按热度按时间pdtvr36n1#
为您分解:
这将为Map中的值表达式的所有章节获取所有唯一的数据库名称。
据我所知,这一切只是为了将一组数据库名称转换为一个数组。如果是的话,你可以用
allDatabases.toArray(new String[allDatabases.size()]
. 流也有类似的方法(尽管它们采用IntFunction
要创建数组而不是新数组,请执行以下操作:这意味着:
注意
distinct
复制集合的唯一性。4ngedf3f2#
从不需要数组开始。它们是低级的、不灵活的构造,不能很好地处理泛型,通常不应该使用它们,除非你真的知道自己在做什么,并且愿意接受一点痛苦来适应它。
流是一种工具。不是普遍的进步。如果有急迫的需要,一定要随波逐流。但是不要因为你认为流更好,就用流来代替一切。做你觉得舒服的事:)
如果您必须:
你根本不使用键,只使用值。那为什么要费心使用入口集呢?values()将以更少的努力得到您想要的。
这是相当基本的;也许放弃你正在处理的具体案例,先学习一些教程,然后再重新学习,你很快就会掌握窍门。