Java 8中,可以使用流来将Map<K, List<D>>转换为Map<D, List<K>>。下面是一个示例代码和解释:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建一个示例的Map<K, List<D>>
Map<String, List<Integer>> map = new HashMap<>();
map.put("A", Arrays.asList(1, 2, 3));
map.put("B", Arrays.asList(4, 5, 6));
map.put("C", Arrays.asList(7, 8, 9));
// 使用流将Map<K, List<D>>转换为Map<D, List<K>>
Map<Integer, List<String>> resultMap = map.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.map(value -> new AbstractMap.SimpleEntry<>(value, entry.getKey())))
.collect(Collectors.groupingBy(AbstractMap.SimpleEntry::getKey,
Collectors.mapping(AbstractMap.SimpleEntry::getValue, Collectors.toList())));
// 输出转换后的结果
System.out.println(resultMap);
}
}
在上面的示例代码中,首先创建了一个示例的Map<K, List<D>>,其中键为String类型,值为Integer列表。然后使用流对Map进行转换,flatMap操作将Map中的每个键值对转换成一个新的键值对,新的键为Integer类型,值为原来的键。最后使用collect操作将转换后的结果收集到一个新的Map<D, List<K>>中。
输出结果为:
{1=[A], 2=[A], 3=[A], 4=[B], 5=[B], 6=[B], 7=[C], 8=[C], 9=[C]}
这个转换操作适用于将一个包含多个键值对的Map转换为以原来的值为键,原来的键为值的新Map。这种转换在某些场景下很有用,比如需要通过值来查找对应的键。
腾讯云相关产品和产品介绍链接地址:
请注意,以上产品和链接仅作为示例,具体选择和推荐应根据实际需求和情况进行。
领取专属 10元无门槛券
手把手带您无忧上云