java - Java中两个列表之间的关系

标签 java

我有两组不同类型的对象。一个集合中的每个元素都与另一个集合中的一个元素相关,并且两个列表属于两个不同的类。

我有一个函数可以迭代一个集合并检查是否必须删除该元素,如果需要删除,我必须删除另一集合中的关联元素。

我必须使用什么样的收集和方法才能做到这一点?

最佳答案

所描述的操作听起来很适合在 Java 中使用 Set(而不是 List)。例如:

// s1 contains the set {1, 4, 5, 3}
Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

// s2 contains the set {1, 2, 3}
Set<Integer> s2 = new HashSet<Integer>();
s2.add(1); s2.add(2); s2.add(3);

// perform the difference between s1 and s2
s1.removeAll(s2);

// now s1 contains the set {4, 5}
System.out.println(s1);
=> [4, 5]

更新

如果两个集合都包含不同类型的元素,那么您必须设计一种从一种类型转换为另一种类型的方法,或者正如您在问题中所说的那样:找到“另一个集合中的关联元素”。这可以是一个简单的转换,也可以是一个 Map ,以这样的方式保存关系:给定第一个集合的元素,您可以快速从第二个集合中获取相应的元素。例如,如果转换就足够了:

Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

Set<String> s2 = new HashSet<String>();
s2.add("1"); s2.add("2"); s2.add("3");

for (String s : s2) {
    // find "associated element"
    Integer n = Integer.valueOf(s);
    if (s1.contains(n))
        s1.remove(n);
}

如果简单的转换是不可能的,那么B计划就是定义元素之间的映射:

Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

Set<String> s2 = new HashSet<String>();
s2.add("1"); s2.add("2"); s2.add("3");

// map the equivalences from one set into the other
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);

for (String s : s2) {
    // find "associated element"
    Integer n = map.get(s);
    if (s1.contains(n))
        s1.remove(n);
}

关于java - Java中两个列表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728324/

相关文章:

java - 通过显式配置使用 Spring Boot

java - 尝试了解 Servlet 调用的计数

java - 使用 Eclipse 调试 RMI 应用程序

java - 方向数组: reducing complexity

java - 调用操作后,在操作内的操作 url 中添加查询参数

java - Mac OS 10.9 上的 Bluecove

java - 在 selenium 中测试脚本以验证网页标题

java - JAR list 代码库不匹配

java - Spring 集成流程与常规服务和适配器

java - 无法下载整个解密的txt文件