Я не совсем уверен, что понимаю, что вы пытаетесь сделать. Как, например, вы обрабатываете строку, в которой два значения отличаются, а не одинаковы (что, по-видимому, и подразумевается вашим кодом)? Карта требует уникальных ключей, поэтому вы не можете использовать filename
в качестве ключа, если она имеет несколько значений.
Тем не менее, вы можете получить желаемый результат с данными, подразумеваемыми вашим результатом, используя:
def fileMatches = [:]
new File('C:\\BRUCE\ForensicAll.txt').eachLine { line ->
def (source, matches) = line.split(/\t/)[0,2]
fileMatches[source] = (matches as int)
}
Но это сожжет данные (т. Е. У вас всегда будет второе значение из последней строки вашего файла. Если это не то, что вы хотите, вы можете переосмыслить свою структуру данных здесь.
В качестве альтернативы, если вам нужны уникальные значения, вы можете сделать:
def fileMatches = [:].withDefault([] as Set)
new File('C:\\BRUCE\ForensicAll.txt').eachLine { line ->
def (source, matches) = line.split(/\t/)[0,2]
fileMatches[source] << (matches[1] as int)
}
Это приведет к чему-то вроде [filename:[984]]
для данных примера и, например, [filename:[984, 987]]
для файлов, имеющих эти два значения в двух столбцах, которые вы проверяете.
Опять же, это действительно зависит от того, что вы пытаетесь захватить. Если бы вы могли предоставить более подробную информацию о том, что вы пытаетесь достичь, ваш вопрос может стать ответом ...