我想用Java 8的streams和lambdas将一个对象列表翻译成一个地图。
这就是我在Java福音7章及以下的写法。
private Map<String, Choice> nameMap(List<Choice> choices) {
final Map<String, Choice> hashMap = new HashMap<>();
for (final Choice choice : choices) {
hashMap.put(choice.getName(), choice);
}
return hashMap;
}
我可以很容易地使用Java 8和番石榴,但我想知道如何做到这一点没有番石榴。
在番石榴中:
private Map<String, Choice> nameMap(List<Choice> choices) {
return Maps.uniqueIndex(choices, new Function<Choice, String>() {
@Override
public String apply(final Choice input) {
return input.getName();
}
});
}
番石榴配Java 8只羊羔肉。
private Map<String, Choice> nameMap(List<Choice> choices) {
return Maps.uniqueIndex(choices, Choice::getName);
}
使用getName()
作为键,choice
本身作为映射的值:
Map<String, Choice> result =
choices.stream().collect(Collectors.toMap(Choice::getName, c -> c));
如果不能保证您的键对于列表中的所有元素都是唯一的,则应将其转换为map
而不是map
Map<String, List<Choice>> result =
choices.stream().collect(Collectors.groupingBy(Choice::getName));
基于收集器
文档,它非常简单:
Map<String, Choice> result =
choices.stream().collect(Collectors.toMap(Choice::getName,
Function.identity()));
问题内容: 我正在尝试合并流列表并对其进行处理。 在这里,我得到b的几个列表。 但是,我只想将我的所有b收集在一个列表中。有任何想法吗 ? 问题答案: 这就是flatMap的用途:
我有这样的东西: 现在,我想在Java8中使用新的流过滤器API: 我对getFilteredRes_NEW()的问题是:
问题内容: 我有一个带有以下签名的类: 我想要一个来自a 的键,该键将是该类的名称。我如何使用java8流按es名称对列表进行分组?所有es在名称上都是唯一的。 可以在单个流中求解,还是应该以某种方式拆分它还是采用经典解决方案? 问题答案:
我试图使用
我有一个订单列表,我想使用Java8Stream和Collectors按用户分组。GroupingBy: 这将返回包含用户和订单列表的映射: 我不需要整个对象User,只需要它的username字段,它是一个字符串,所以我想获得如下内容: 我试图使用stream.map将用户映射到username字段,但无法正确实现。我怎样才能尽可能简单地做到这一点呢?
我想确定一个列表是否是字谜,或者是否使用Java8。 示例输入: 我已经编写了以下函数来完成这项工作,但我想知道是否有一个更好和优雅的方法来做到这一点。 似乎我不能用方法对char数组排序,所以我使用了第二个map运算符。如果有某种方法,我可以直接操作char流,而不是char数组的流,这也会有所帮助。
我的问题基本上归结为将列表减少为链表,但从reduce函数推断出的类型似乎不正确。 我的列表如下所示 我希望reduce函数在每个reduce步骤中都能做到这一点 然而,减少函数似乎认为这不起作用,因为我猜它不认为身份是节点。 这是我的密码。 我做错了什么? 在接受答案后编辑,我的代码如下所示: 现在打印出来了 我仍然不知道为什么Java不能告诉减少函数的第三个参数是不必要的,它永远不会被调用,但
我想知道,如何在Java8中使用流API迭代多级列表 根据Java8,我应该做如下的操作 我想要流利地做这件事(使用内部迭代)。任何解释都会很感激。