Вы можете вводить значения в карту из файла свойств, используя аннотацию @Value
, подобную этой.
Свойство в файле свойств.
propertyname={key1:'value1',key2:'value2',....}
В вашем коде .
@Value("#{${propertyname}}") private Map<String,String> propertyname;
Обратите внимание на хэштег как часть аннотации.
Подчеркивания не являются допустимыми именами переменных, они используются для игнорирования переменных. Два подчеркивания в (c, _)
и _ ::: c
не связаны.
(c, _) => { ... }
полностью игнорирует второй параметр, он пропал. _ ::: c
является сокращением для лямбда-выражения x => x ::: c
, которое ожидает x
, который является List[B_]
для некоторого неизвестного типа B_
, который не может быть выведен, потому что это не ожидается, и это нигде найти в вашем коде. Если вы хотите добавить второй аргумент к первому, вам нужно написать что-то вроде
ls.foldLeft(List.empty[Int])((c, x) => x :: c)
или даже
ls.foldLeft(List.empty[Int])(_.::(_))
Видите, вы можете написать как List(1,2,3).reduce((x, y) => x + y)
, так и List(1,2,3).reduce(_ + _)
. Здесь (x, y) => x + y
и _ + _
- функции, первая более очевидная, а вторая - функция, где каждое подчеркивание заменяется одним из параметров.
То, что вы здесь делаете, это (c, _) => _:::c
пытается объединить оба. Но, на самом деле, вы просто говорите компилятору scala:
c
, а другой отбрасывается. (Int, Int) => (Int => Int) = (a: Int, _) => _ * 2
) Здесь вы можете переписать
, используя только подчеркивание:
ls.foldLeft(List.empty[Int])(_.::(_))
, или переписать без отбрасывания:
ls.foldLeft(List.empty[Int])((acc, cur) => cur :: acc)
ls
- список типа List[Int]
foldLeft
- Создать что-то новое из Int
элементов ls
. List[Int]()
- Это что-то новое будет другим List[Int]
. Начните с пустого. (c, _)
- С каждым шагом получайте List
, который мы строим, мы назовем его c
и Int
из ls
, но не дадим ему имя (т.е. выбросим его ). [1 123] _:::c
- Попробуйте объединить 2 списка вместе. Одним из них является список c
, который мы создаем, а другим ... ничего. Это не List
или Int
. Это неназванный параметр, но у нас его нет. Из 2 полученных параметров один был назван c
, а другой был отброшен. Вот один способ исправить это: (c, n) => List(n):::c
(объединить 2 списка вместе)
Вот лучший способ исправить это: (c, n) => n::c
(добавить новый элемент в начало этого списка )
Использование неназванных параметров: ls.foldLeft(List[Int]())(_.::(_))