java - 将 map 的值与 groovy 中的另一个 map 值进行比较

标签 java groovy

我有一个要求,我想检查 map 的值与另一个 map 的值是否匹配,我想获取 key 第一张 map

虚拟化 map

def virtua=[
    "VMWARE"        :   "00:68:8B:",
    "VMWARE"        :   "00:68:8A",
    "COLINUX"       :   "00:18:8A:"
]

网络 map

def network=[
    "eth0":"00:68:8B:",
    "eth1":"00:18:8A:",
    "eth2":"00:68:8A:"
]

因此,在匹配来自 networkvirtua 的值后,我得到以下输出,我该如何在 groovy 中做到这一点?

eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE

更新@tim_yates@Xaerxess回答之后,我认为最好将MAC地址作为VMWARE<的 key 可以重复

def virtua1=[
"00:68:8B:"     :   "VMWARE",
"00:68:8A:"     :   "VMWARE",
"00:18:8A:"     :   "COLINUX"
]

def coll = network.collect { k, v ->   
    //[ k, v, virtua.find { a, b -> b == v }?.key ]
    print "$k,$v,"
    println virtua1.find{ a, b -> a == v }?.value
}

输出

eth0,00:68:8B:,VMWARE
eth1,00:18:8A:,COLINUX
eth2,00:68:8A:,VMWARE

最佳答案

映射中不能有重复的键(您有多个 VMWARE 条目),并且您的网络变量是列表而不是映射...

更正这些,并假设您的意思是:

def virtua=[
    "VMWAREA"       :   "00:68:8B:",
    "VMWAREB"       :   "00:68:8A:",
    "COLINUX"       :   "00:18:8A:"
]
def network=[
    "eth0":"00:68:8B:",
    "eth1":"00:18:8A:",
    "eth2":"00:68:8A:",
]

你可以这样做:

def coll = network.collect { k, v ->
  [ k, v, virtua.find { a, b -> b == v }?.key ]
}

为您提供列表:

[ ["eth0", "00:68:8B:", "VMWAREA"],
  ["eth1", "00:18:8A:", "COLINUX"],
  ["eth2", "00:68:8A:", "VMWAREB"] ]

如果您希望将其打印为逗号分隔的字符串,您可以这样做:

coll*.join(',').each { println it }

编辑 -- key:list 示例

在评论中,有人问我有关将值作为列表的映射(以解决重复键问题)的问题;

def virtua=[
    "VMWARE"  : [ "00:68:8B:", "00:68:8A:" ],
    "COLINUX" : [ "00:18:8A:" ]
]
def network=[
    "eth0":"00:68:8B:",
    "eth1":"00:18:8A:",
    "eth2":"00:68:8A:",
]
network.each { k, v ->
  println "$k,$v,${virtua.find { it.value.grep( v ) }?.key}"
}

关于java - 将 map 的值与 groovy 中的另一个 map 值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8179712/

相关文章:

java - 为 JBoss AS 7 运行 Java 服务包装器时出错

java - IcedTea 和 lwgjl

java - 无法在达芬奇配置器中创建脚本项目

grails - 如何将相同的值传递给Grails中的每个 View

file - 如何在 Gradle 自定义任务中初始化 FileTree 字段?

java - 构建类似于 httpbuilder 的异步 httpbuilder

java - 我应该在 JPA2.0 中使用 Primitives 还是包装器?

java - Libgdx:绘制大量粒子

unix - Groovy 安装错误

java - 在另一个类中定义并在 JFrame 中使用的 JButtton 监听器