我有一个包含以下映射的哈希映射....
HashMap <String , Integer>hm = new HashMap <String , Integer> ();
hm.put("e", 0);
hm.put("h",1);
hm.put("i", 2);
hm.put("k",3);
hm.put("l",4);
hm.put("r",5);
hm.put("s",6);
hm.put("t",7);
与此同时,我有一个二进制序列,我从另一个计算中获得
1 0 10 100 1 10 111 100 0 101
我的目标是从上面的哈希映射中获取这些二进制数字显示的结果字符。
For example .... 001 = 1 = h
000 = 0 = e
010 = 2 = i
此代码是在加密中实现一次性填充的程序的一部分。 我已经执行了加密和解密。
在这里参考答案3以获取代码证明:
storing charcter and binary number in a hash map
但我正在努力向我的哈希映射中的字母显示解密的二进制代码输出。
提前致谢
答案 0 :(得分:0)
您需要从值映射到键(这与HashMap
的工作方式相反)。构建解密Map
。
Map<Integer, String> dec = new HashMap<>();
for (Map.Entry<String, Integer> kp : hm.entrySet()) {
dec.put(kp.getValue(), kp.getKey());
}
然后,您可以通过将输入值解析为int
并获取相应的值来迭代它。像
String input = "1 0 10 100 1 10 111 100 0 101";
Stream.of(input.split("\\s+")).map(s -> dec.get(Integer.parseInt(s, 2)))
.forEachOrdered(s -> System.out.print(s + " "));
System.out.println();
答案 1 :(得分:0)
创建一个包含值和行交换的新地图。
final Map<String, Integer> hm = ...
final Map<Integer, String> mapping = hm.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
现在您可以使用此地图进行查找:
final List<Byte> bytes = ...
final List<String> keys = bytes.stream()
.map(mapping::get)
.collect(Collectors.toList());