在 Java 中维护传递映射
Maintain a transitive mapping in Java
场景
class A{
String aId;
;}
class B{
String bId;
;}
class C{
String bId;
;}
class D{
B b;
C c;
;}
我有一个List<A>
。我使用 for 循环遍历此列表,执行一些数据库操作并创建 List<B>
。我需要一个从 A 到 B 的映射,所以我也创建了一个 Map<A,B>
。
从这个 List<B>
,我进行了批量 API 调用并获取了一个 List<D>
。我还需要从 B 到 C 的映射,所以我遍历这个 List<D>
并创建一个 Map<B,C>
.
我的主要要求是从 A 到 C 的映射。我无法删除批量 API 调用,但想删除维护两个映射的额外开销。有什么方法可以维护传递映射,即直接在 JAVA 中 A 到 C 的映射?
您可以按如下方式生成它:
for 循环
import java.util.HashMap;
import java.util.Map;
public class Main
{
public static void main(String[] args)
{
Map<String,String> m1= new HashMap<>();
Map<String,String> m2 = new HashMap<>();
m1.put("aaa", "bbb");
m2.put("bbb", "ccc");
Map<String,String> combined = new HashMap<>();
for(String key : m1.keySet())
{
// TODO: add error handling or make sure get never returns null
combined.put(key, m2.get(m1.get(key)));
}
System.out.println(combined.get("aaa"));
}
}
流
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;;
public class Main
{
public static void main(String[] args)
{
Map<String,String> m1= new HashMap<>();
Map<String,String> m2 = new HashMap<>();
m1.put("aaa", "bbb");
m2.put("bbb", "ccc");
Map<String,String> combined = m1.keySet().stream().collect(Collectors.toMap( Function.identity(), x->m2.get(m1.get(x))));
System.out.println(combined);
}
}
编辑:根据要求,添加了一个使用流的版本,尽管我更喜欢第一个版本。
场景
class A{
String aId;
;}
class B{
String bId;
;}
class C{
String bId;
;}
class D{
B b;
C c;
;}
我有一个List<A>
。我使用 for 循环遍历此列表,执行一些数据库操作并创建 List<B>
。我需要一个从 A 到 B 的映射,所以我也创建了一个 Map<A,B>
。
从这个 List<B>
,我进行了批量 API 调用并获取了一个 List<D>
。我还需要从 B 到 C 的映射,所以我遍历这个 List<D>
并创建一个 Map<B,C>
.
我的主要要求是从 A 到 C 的映射。我无法删除批量 API 调用,但想删除维护两个映射的额外开销。有什么方法可以维护传递映射,即直接在 JAVA 中 A 到 C 的映射?
您可以按如下方式生成它:
for 循环
import java.util.HashMap;
import java.util.Map;
public class Main
{
public static void main(String[] args)
{
Map<String,String> m1= new HashMap<>();
Map<String,String> m2 = new HashMap<>();
m1.put("aaa", "bbb");
m2.put("bbb", "ccc");
Map<String,String> combined = new HashMap<>();
for(String key : m1.keySet())
{
// TODO: add error handling or make sure get never returns null
combined.put(key, m2.get(m1.get(key)));
}
System.out.println(combined.get("aaa"));
}
}
流
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;;
public class Main
{
public static void main(String[] args)
{
Map<String,String> m1= new HashMap<>();
Map<String,String> m2 = new HashMap<>();
m1.put("aaa", "bbb");
m2.put("bbb", "ccc");
Map<String,String> combined = m1.keySet().stream().collect(Collectors.toMap( Function.identity(), x->m2.get(m1.get(x))));
System.out.println(combined);
}
}
编辑:根据要求,添加了一个使用流的版本,尽管我更喜欢第一个版本。