2015-07-09 4 views
4

У меня проблема с Java Lambda Expressions. Я использую Spring 4, JdbcTemplate, Java 8. Intellij IDEA показывает «Циклический вывод». Что это такое и как это исправить? Спасибо за внимание.Java Lambda Циклический вывод

@Override 
public User getUser(long id) { 
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?", 
      ps -> { 
       ps.setLong(1, id); 
      }, 
      (rs, rowNum) -> { 
       return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5)); 
      }); 
} 

enter image description here

решаемые Эта функция возвращает список, а не пользователя. И правильная функция заключается в следующем:

@Override 
public User getUser(long id) { 
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?", 
      ps -> { 
       ps.setLong(1, id); 
      }, 
      (rs, rowNum) -> { 
       return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5)); 
      }).get(0); 
} 
+0

0 szenshot missing: D – zpontikas

+1

Возможный дубликат [java 8 циклический вывод в моем случае] (http://stackoverflow.com/questions/26422166/java-8-cyclic-inference-in-my -case) –

+0

Что такое IntelliJ версия у вас есть? – Vic

ответ

0
@Override 
public User getUser(long id) { 
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?", 
      ps -> { 
       ps.setLong(1, id); 
      }, 
      (rs, rowNum) -> { 
       return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5)); 
      }).stream().findFirst().orElse(null); 
} 

Или вы можете также использовать .findAny вместо FindFirst.

Смежные вопросы