Что не так с этим лямбда-синтаксисом (Java)? - PullRequest
0 голосов
/ 31 января 2020

Только чтобы не забыть

  • Java 8 SE
  • Eclipse 2019-12
  • Spring Boot 2.2.4.RELEASE

Я пытаюсь изучить Spring Boot и пытаюсь понять, почему лямбда не компилируется. Вот пример весенней загрузки (который компилируется).

jdbcTemplate.query(
    "SELECT id, first_name, last_name FROM customers WHERE first_name = ?", new Object[] { "Josh" },
    (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name"))
).forEach(customer -> log.info(customer.toString()));

А вот моя попытка изменить этот пример для моих собственных нужд:

@RestController
public class SwitchController {

@Autowired
JdbcTemplate jdbcTemplate;

@GetMapping
public Rows getSwitchRows() {

    Rows switches = new Rows();

    jdbcTemplate.query(
            "SELECT swityp, oldkey, newkey, delete FROM table",
            (rs, rowNum) -> new Switch(rs.getString("swityp"), rs.getString("oldkey"), rs.getString("newKey"), rs.getString("delete"))
        ).forEach(switch -> switches.addRow(switch));
    return switches;
}

}

Лямбда в forEach() выдает ошибку на ->, которая говорит Syntax error on token "->", ( expected, а также на switches.addRow(switch), которая говорит Syntax error on token "switch", delete this token. Это почти как если бы forEach() не узнал, что я набрал лямбду. Может быть, то, что я думал, было лямбда, не так. Если это так, то почему это не лямбда?

Вот мои Switch и Rows классы на случай, если это поможет:

Switch. java

public class Switch {

private final String switchType;
private final String oldKey;
private final String newKey;
private final String delete;

public Switch(String switchType, String oldKey, String newKey, String delete) {
    this.switchType = switchType;
    this.oldKey = oldKey;
    this.newKey = newKey;
    this.delete = delete;
}

public String getSwitchType() {
    return switchType;
}
public String getOldKey() {
    return oldKey;
}
public String getNewKey() {
    return newKey;
}
public String getDelete() {
    return delete;
}

}

Rows. java

public class Rows {

private Object[] rows;

public Rows () {
    super();
}

public void addRow (Object row) {
    rows[rows.length] = row;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...