比较set< string>和map< object>以获得Java8中的map值

k97glaaz  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(326)

我有 Set<String> requests = new HashSet<>() 并在其中动态添加了一些字符串值。
我有 Map<TargetSystems> targetSystems = new HashMap<>(); ,具有名称键和值中的targetsystems对象的targetsystems。
所以我需要Map上的目标系统。
像map.put(“lms”,targetsystems)和更多来自数据库的东西。 Set<String> 请求具有相同的目标系统名称。如何在Java8中实现这一点。我不想在集合中执行foreach循环,因为我已经创建了线程列表和循环。所以我需要在Java8中使用stream.filter之类的解决方案。
提前谢谢。

tzxcd3kk

tzxcd3kk1#

如果要筛选targetsystemsMap:

Map<String, TargetSystems> targetSystemsFiltered = targetSystems.entrySet().stream()
     .filter(entry -> requests.contains(entry.getKey()))
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

如果您只想获得过滤过的targetsystem对象:

Set<TargetSystems> targetSystemsFromSet = targetSystems.entrySet().stream()
      .filter(entry -> requests.contains(entry.getKey()))
      .map(Map.Entry::getValue)
      .collect(Collectors.toSet());
qc6wkl3g

qc6wkl3g2#

我已经得到了答案和下面的代码请看它的工作良好。情况是,如果我们有map<object(its entity class type)>targetsystems,并将targetsystems实体对象按其实体键的名称放置。现在我有多个同名的请求存在于targetsystemsMap中,所以我需要用hashmap均衡hashset值。我的成就如下:
object[]objects=map<string,object>.values().stream().filter(ts->set.contains(ts.getname()).toarray();
我得到object[]类型,所以我可以很容易地从map中得到targetsystems值。
感谢你们所有人的友好回答,也感谢stack overflow。

irlmq6kh

irlmq6kh3#

我想你是说 Map<String, TargetSystems> .
您可以制作Map的副本,并使用set.retainal限制Map中的条目:

Map<String, TargetSystems> copy = new HashMap<>(targetSystems);
copy.keySet().retainAll(requests);

Collection<TargetSystems> systemsForRequests = copy.values();

相关问题