Выражение типа B = > List [B] не соответствует ожидаемому типу List [Int], если перевернуть список в Scala

Вы можете вводить значения в карту из файла свойств, используя аннотацию @Value, подобную этой.

Свойство в файле свойств.

propertyname={key1:'value1',key2:'value2',....}

В вашем коде .

@Value("#{${propertyname}}")  private Map<String,String> propertyname;

Обратите внимание на хэштег как часть аннотации.

0
задан Seth Tisue 16 January 2019 в 18:22
поделиться

3 ответа

Подчеркивания не являются допустимыми именами переменных, они используются для игнорирования переменных. Два подчеркивания в (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])(_.::(_))
0
ответ дан Andrey Tyukin 16 January 2019 в 18:22
поделиться

Видите, вы можете написать как List(1,2,3).reduce((x, y) => x + y), так и List(1,2,3).reduce(_ + _). Здесь (x, y) => x + y и _ + _ - функции, первая более очевидная, а вторая - функция, где каждое подчеркивание заменяется одним из параметров.

То, что вы здесь делаете, это (c, _) => _:::c пытается объединить оба. Но, на самом деле, вы просто говорите компилятору scala:

  1. У меня есть функция двух агентов: c, а другой отбрасывается.
  2. Эта функция возвращает функцию без указанного типа. (Пример: (Int, Int) => (Int => Int) = (a: Int, _) => _ * 2)

Здесь вы можете переписать

, используя только подчеркивание:

ls.foldLeft(List.empty[Int])(_.::(_))

, или переписать без отбрасывания:

ls.foldLeft(List.empty[Int])((acc, cur) => cur :: acc)
0
ответ дан Yevhenii Popadiuk 16 January 2019 в 18:22
поделиться
  • 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]())(_.::(_))

0
ответ дан jwvh 16 January 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: