无法使用java8从地图获取集合

时间:2016-09-12 06:49:56

标签: java java-8

我正在尝试做什么

Set<A> set=new HashSet();
Map<String,List<String>> map=new HashMap();
    if(map.keySet().contains("key"){
    for(String str: map.get("key")
    {
        for(A a : listOfA)
        {
            if(a.getString().equalsIgnoreCase(str);
            set.add(a);
        }
    }

    }

我尝试了什么

if(map.keySet().contains("key")
{
    listOfA
    .stream()
     .filter(t->t.getString().equalsIgnoreCase(map.get("key")
                                               .stream
                                            .flatMap(c->c.toString()))
     .distinct()
     .collect(Collectors.toSet()):

}
  

// error类型为String的方法equalsIgnoreCase(String)不是   适用于参数(Stream)

if(map.keySet().contains("key")
{
    map.get("key").stream().filter(t->t.equals(listOfA.stream().map(a->a.getString()))).collect(Collectors.toSet());
}

并且此方法返回Set&lt; String&gt;,显然是输出但我想要Set&lt; A&gt;作为输出

所以如何解决这个问题,使用函数式编程

2 个答案:

答案 0 :(得分:4)

您可以通过直播$ sh newsh.sh this is test 10 newsh.sh: line 9: syntax error near unexpected token `fi' newsh.sh: line 9: `fi' 并使用{来检查String map.get("key") equalsIgnoreCasegetString()实例的A是否map.get("key") {1}}:

anyMatch

答案 1 :(得分:2)

如果您的listOfA相当大,则以下解决方案可能会更好地扩展:

List<String> value = map.getOrDefault("key", Collections.emptyList());
Collection<String> c;
if(value.isEmpty()) c=value;
else { c=new TreeSet<>(String.CASE_INSENSITIVE_ORDER); c.addAll(value); }
Set<A> set = listOfA.stream()
                    .filter(a->c.contains(a.getString()))
                    .collect(Collectors.toSet());