我正在尝试使用Java 8 Stream来查找a中的元素LinkedList.但是,我想保证过滤条件只有一个匹配.
拿这个代码:
public static void main(String[] args) {
LinkedList<User> users = new LinkedList<>();
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));
User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
System.out.println(match.toString());
}
Run Code Online (Sandbox Code Playgroud)
static class User {
@Override
public String toString() {
return id + " - " + username;
}
int id;
String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
public void setUsername(String username) …Run Code Online (Sandbox Code Playgroud) 在我发布这个问题之前,我已经看过这个了,但是我无法得到我想要的东西.
我知道,对于我写的查询,可能只存在一行或根本没有.所以,没有理由让我使用getResultList().
这是我的代码:
String hql="from DrawUnusedBalance where unusedBalanceDate= :today";
Query query=em.createQuery(hql);
query.setParameter("today",new LocalDate());
DrawUnusedBalance drawUnusedBalance=
(DrawUnusedBalance)query.getSingleResult();// we can have only a
// single datum per day
//`System.out.println(drawUnusedBalance.toString());`
Run Code Online (Sandbox Code Playgroud)
问题是,如果没有行,它会抛出异常,如果没有,它就可以正常工作.我知道这个问题,但我也在寻找最好的解决方案.
我想要的是,如果DB中没有行我想获得一个空对象(而不是获得异常)所以我将插入一个新数据,如果它不是null,我只想更新它.
有一种方法可以解决这个问题,我认为这不是正确的方法.它是:我将有一个try-catch块,如果它抛出异常,我可以写入将新数据插入到catch块上的DB中.但我相信会有更好的方法.
有人可以告诉我JPA 1.0 EntityManager在通过find检索对象时的内在原因,如果找不到则必须处理null,但是当通过createQuery使用Query接口时getResultList会在找不到时抛出NoResultException.
也许我错过了一些东西,但我觉得它与语言非常不一致,实际上我不得不做很多的重新设计,因为使用查询界面从简单的查找器更改为更细粒度的查询.
多谢你们.
我需要从表中检索单行,我感兴趣的是哪种方法更好.一方面getSingleResult是为了检索单个结果而设计的,但它会引发异常.请问这种方法在性能与效益getResultList同
query.setFirstResult(0);
query.setMaxResults(1);
Run Code Online (Sandbox Code Playgroud)