在Groovy中更改映射中的值

在Groovy中更改映射中的值,groovy,maps,key,Groovy,Maps,Key,这是关于我用Groovy编写的一个非常基本的程序 我在一个方法中定义了一个映射: def addItem() { print("Enter the item name: ") def itemName = reader.readLine() print("Enter price : ") def price = reader.readLine() print("Enter barcode : ") def barcode = reader

这是关于我用Groovy编写的一个非常基本的程序

我在一个方法中定义了一个映射:

  def addItem() 
  {
    print("Enter the item name: ")
    def itemName = reader.readLine()
    print("Enter price : ")
    def price = reader.readLine()
    print("Enter barcode : ")
    def barcode = reader.readLine()
    data[itemName] = ['price' : price, 'barcode' : barcode]
  }
问题是我不知道如何在不同的方法中只更新一个值。以下是我尝试过的:

  def updatePrice() 
  {
    print("Enter the item name: ")
    def itemName = reader.readLine()
    print("Enter new price : ")
    def price = reader.readLine()
    data[itemName] = ['price' : price]
  }
这类工作。它改变了price的值,但也改变了条形码的值为“null”,可能是因为它被…什么都没有覆盖

基本上,我需要代码来改变价格,但保持条形码不变。有什么办法可以做到这一点吗


很抱歉,如果这是一个可笑的基本问题,但我仍然是编程新手。

您所做的是替换给定项的整个map实例。有几种方法可以更改地图中键的值。您可以使用传统的Java方式:

data[itemName].set('price', price)
您可以像使用方括号访问itemName一样访问它:

data[itemName].['price'] = price
或者,您可以使用
Map.keyname
符号访问映射的值。因此,你也可以简单地写:

data.itemName.price = price
当您要检索给定键的值时,此操作也有效:

println data.itemName.price // prints the price value for an item

很好用!非常感谢你!第一个方法,使用set()在Groovy中似乎不起作用。当您想要链接数据[itemName].set('price',price.).set('barcode',barcode)等东西时,这是很不幸的,因为Java中通常使用这种方法。我不知道有哪个方便的setter可以返回map对象。