相关疑难解决方法(0)

Java groupingBy collector是否保留列表顺序?

考虑一个列表List<People>,其中元素按升序排序People.getAge().如果我们使用此列表进行分组Collectors.groupingBy(People::getCity),那么每个组/城市的结果列表是否仍按年龄排序?

在实践中,它确实似乎保留了秩序.我正在寻找保证.

该方法的Javadoc说:

如果不需要保留元素出现在生成的Map收集器中的顺序,则使用groupingByConcurrent(Function)可以提供更好的并行性能

我不确定这是否是指列表中的项目顺序.

java java-stream collectors

8
推荐指数
1
解决办法
2181
查看次数

如何创建List <T>到Map <String,T>而不是Map <String,List <T >>?

我用的情况下遇到的,当我需要转换List<Book>Map<String, Book>和唯一的解决办法我能找到的是怎么做的Map<String, List<Book>>.

类本身看起来如下(我省略了getter/setters和构造函数):

public class Book {
    private String asin;
    private String author;
    private String title;
}
Run Code Online (Sandbox Code Playgroud)

我希望通过某些唯一的密钥映射所有书籍,因此重复的可能性要么是可忽略的,要么是0.

我试着这样做:

    Map<String, Book> booksByAsinAndTitle = books.stream()
        .collect(Collectors.groupingBy((book) -> book.getAsin() + "||" + book.getTitle()))
        .entrySet()
        .stream()
        .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue().get(0)));
Run Code Online (Sandbox Code Playgroud)

它可以工作,但它看起来很难看,几乎不可读,并且在代码库中不太好,因为它可能会让我的同事感到困惑.有没有更好的方法java 8来达到相同的结果?

java java-8 java-stream

7
推荐指数
1
解决办法
133
查看次数

标签 统计

java ×2

java-stream ×2

collectors ×1

java-8 ×1