【问题标题】:Print the specific field from list打印列表中的特定字段
【发布时间】:2018-05-05 22:11:25
【问题描述】:

请帮忙打印assetNumber。需要使用 groovy 中的列表搜索特定的资产名称并打印其关联的资产编号。

目前,它不打印值。一旦输入搜索条件,它就会触发。

class Main
{
public static void main(String[] args)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
List list = new ArrayList()
Asset asset = new Asset()
def name
def assetNumber
def assigneeName
def assignedDate
def assetType
String userInput = "Yes"
while(userInput.equalsIgnoreCase("Yes"))
{
println "Enter the asset details:"
asset.name = br.readLine()
asset.assetNumber= Integer.parseInt(br.readLine())
asset.assigneeName = br.readLine()
asset.assignedDate = Date.parse('dd/MM/yyyy', br.readLine())
list.add(asset)
println "Do you want to continue(yes/no)"
userInput = br.readLine()
}
println "Enter the asset type:"
assetType = br.readLine()
println "Asserts with type "+assetType+":"
def items = list.findAll{p->p.name == assetType }
items.each { println it.assetNumber }
}
}
 class Asset
{
def name
def assetNumber
def assigneeName
def assignedDate
}

【问题讨论】:

标签: groovy


【解决方案1】:

您正在覆盖 Asset 对象中的值,然后每次都将相同的对象添加到列表中

如果您在循环内(而不是在循环外)创建新资产,它应该可以工作...

类似这样的:

import groovy.transform.*

class Main {
    static main(args) {
        def console = System.console()
        def list = []
        while (true) {
            def name = console.readLine 'Enter the asset name:'
            def number = console.readLine 'Enter the asset number:'
            def assignee = console.readLine 'Assignee name:'
            def date = console.readLine 'Date (dd/MM/yyyy):'
            list << new Asset(
                name: name,
                assetNumber: Integer.parseInt(number),
                assigneeName: assignee,
                assignedDate: Date.parse('dd/MM/yyyy', date)
            )
            if ('Y' != console.readLine('Enter another (y/n):')?.take(1)?.toUpperCase()) {
                break
            }
        }
        def type = console.readLine 'Enter the asset type:'
        println "Assets with type $type:"
        list.findAll { p -> p.name == type }
            .each { println it.assetNumber }
    }

    @Canonical
    static class Asset {
        def name
        def assetNumber
        def assigneeName
        def assignedDate
    }
}

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多