首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于泛型集合的Java 8 groupingBy

关于泛型集合的Java 8 groupingBy
EN

Stack Overflow用户
提问于 2016-05-23 22:35:34
回答 1查看 1.4K关注 0票数 0

我对Java泛型相当陌生,我在使用Java8 groupingBy时遇到了问题。

我需要实现一个具有以下接口的tweet容器:

代码语言:javascript
复制
public interface TweetsContainer<T extends Tweet> extends Iterable<T>, Serializable {
...
    Map<String, Collection<T>> groupByLang();
...
}

Tweet是我自己的类,具有正确实现的hashcodeequals等。

下面是我实现方法groupByLang的尝试

代码语言:javascript
复制
public class LinkedListTweetsContainer<T extends Tweet> implements TweetsContainer<T> {
    private final List<T> tweets;
...
    @Override
    public Map<String, Collection<T>> groupByLang() {
        Map<String, Collection<T>> res =
            tweets.stream().collect(Collectors.groupingBy(T::getLang));
        return res;
    }
...
}

但是,我在T::getLang上发现了一个错误,说

代码语言:javascript
复制
Error:(51, 36) java: incompatible types: inference variable R has incompatible bounds
    equality constraints: java.util.Map<java.lang.String,java.util.List<T>>
    upper bounds: java.util.Map<java.lang.String,java.util.Collection<T>>,java.lang.Object

Tweet类具有公共方法getStringID

代码语言:javascript
复制
public class Tweet implements Serializable {
...
    public String getLang() { return lang; }
...
}

这个错误意味着什么,我做错了什么?

更新

@Radiodef,谢谢你的回答,但我想深入探讨一个问题。List a Collection,不是吗?我知道项协方差--当我们有类A,B,B扩展A时,我们讨论的是GenericClass<A>GenericClass<B>的继承。这里我们有相反的情况:相同的参数化类型,但不同(嵌套)泛型类。在这种情况下,Java规则是什么,或者如果我想亲自阅读Java规则,我应该记住哪些关键字/术语?

EN

回答 1

Stack Overflow用户

发布于 2016-05-23 23:03:13

groupingBy收集到一个Map<K, List<T>>

代码语言:javascript
复制
Map<String, List<T>> res =
//          ^^^^^^^
    tweets.stream().collect(Collectors.groupingBy(T::getLang));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37401641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档