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;作为输出
所以如何解决这个问题,使用函数式编程
答案 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")
equalsIgnoreCase
对getString()
实例的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());