Scala 使用索引方式组合两个列表

Scala 使用索引方式组合两个列表,scala,scala-collections,Scala,Scala Collections,第一名单 remoteDeviceAndPort===>List( (1,891w.yourdomain.com,wlan-ap0), (13,ap,GigabitEthernet0), (11,Router-3900,GigabitEthernet0/0) ) 第二份名单 interfacesList===>List( (1,UP,,0,0,0,0,UP,4294,other,VoIP-Null0,0,0), (13,DOWN,,0,0,0,0

第一名单

remoteDeviceAndPort===>List(
  (1,891w.yourdomain.com,wlan-ap0), 
   (13,ap,GigabitEthernet0), 
    (11,Router-3900,GigabitEthernet0/0)
   )
第二份名单

interfacesList===>List(
  (1,UP,,0,0,0,0,UP,4294,other,VoIP-Null0,0,0),
  (13,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet6,0,0),
  (11,UP,,0,0,0,0,UP,100,vlan,Vlan11,4558687845,1249542878), 
  (2,UP,,0,0,972,1327,UP,0,Tunnel,Virtual-Access1,0,0), 
  (4,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet2,0,0),
  (6,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet2,0,0)
  )
以上是我的两个列表,现在我必须将这两个列表合并如下

预期产出=>

 combineList = List(
   (1,UP,,0,0,0,0,UP,4294,other,VoIP-Null0,0,0,891w.yourdomain.com,wlan-ap0),        
   (13,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet6,0,0,ap,GigabitEthernet0),
  (11,UP,,0,0,0,0,UP,100,vlan,Vlan11,4558687845,1249542878,Router-3900,GigabitEthernet0/0),
   (2,UP,,0,0,972,1327,UP,0,Tunnel,Virtual-Access1,0,0,empty,empty), 
  (4,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet2,0,0,empty,empty),
  (6,DOWN,,0,0,0,0,UP,100,Ethernet,FastEthernet2,0,0,empty,empty)
)类似的问题


请提供类
NetworkDeviceInterface
的签名。您不应该有“空”值。如果我更改了第二个列表结构,是否可能现在查看第二个列表您没有抓住要点。问题不是来自类本身,而是来自处理可选/空值的方式。这就是为什么我要上课的原因,来看看你到底在做什么(ifIndex:Int,ifOperStatus:String,ifDescr:String,ifOutErrors:Int,ifInOctets:Long,ifOutOctets:Long,ifAdminStatus:String,ifSpeedMbps:Long,ifType:String,ifName:String,ifHCOutOctets:Long,ifHCInOctets:Long)case类接口远程设备和端口(ifIndex:Int,remoteDevice:String,remotePort:String)案例类NetworkDeviceInterface(ifIndex:Int,ifOperStatus:String,ifDescr:String,ifOutErrors:Int,ifInErrors:Int,ifInOctets:Long,ifOutOctets:Long,ifAdminStatus:String,ifSpeedMbps:Long,ifType:String,ifName:String,ifHCOutOctets:Long,ifHCInOctets:Long)实体的外观并不重要。我向您展示了一个更抽象的问题的决定。您有两个集合:带有键字段的基本对象和带有标识符的附加对象。您需要使用来自附加集合的数据通过键相等来充实基集合中的对象。val listvlandipAddress=interfacesList map{case(index,v1,v2)=>(index,v1,v2,remoteDeviceAndPort.toMap.getOrElse(index,”))
case class NetworkDeviceInterfaces(index: Int, params: String*)

val remoteDeviceAndPort = List(
  (1,"891w.yourdomain.com","wlan-ap0"),
  (13,"ap","GigabitEthernet0"),
  (11,"Router-3900","GigabitEthernet0/0")
)

val rdapMap = remoteDeviceAndPort map {case (k, v1, v2) => k -> (v1, v2) } toMap

val interfacesList = List(NetworkDeviceInterfaces(1,"UP","","0","0","0","0","UP","4294","other","VoIP-Null0","0","0"))

val result = interfacesList map {
  interface => {
    val (first, second) = rdapMap.getOrElse(interface.index, ("empty", "empty"))
    NetworkDeviceInterfaces(interface.index, (interface.params ++ Seq(first, second)):_*)
  }
}