我有下面的代码片段,我想用optionals重写
public User signup(UserDTO userDTO) throws Exception {
User user = modelMapper.map(userDTO, User.class);
if (userRepo.findByEmail(user.getEmail()).isPresent()) {
throw new EmailAlreadyUsedException();
}
if (userRepo.findByUsername(user.getUsername()).isPresent()) {
throw new UsernameAlreadyUsedException();
}
user.setId(UUID.randomUUID().toString());
// set other stuff like encoded password
userRepo.save(user);
}
使用optionals,我可以想出以下方法。
public User signup(UserDTO userDTO) throws Exception {
return Optional.of(userDTO)
.map(u -> modelMapper.map(u, User.class))
.map(user -> {
user.setId(UUID.randomUUID().toString());
// set other stuff like encoded password
// check email and username if they exist
// save
userRepo.save(user);
return user;
}).orElseThrow(Exception::new);
}
我被困在无法根据用户名和电子邮件引发特定异常的部分。如果其中一个已经存在于db中,我可以返回null,这将导致orElseThrow工作,但异常类型相同。我想要两个不同情况的例外。我该怎么办?
我更喜欢更实用的可选用法。
问题是CheckedException的设计不是为了在Java上使用函数式。方法<代码>。可选的map接收一个不会引发异常的函数。只需将您的异常转换为RuntimeException的,即可按预期工作。
...但要小心实例化可丢弃文件(尤其是参数writableStackTrace,configure at false,应该可以),看看:实例化可丢弃文件的隐藏性能成本。
如果您对Java中的函数式编程方法感兴趣,也可以看看Vavr,它是一个非常好的库,支持CheckedException的选项。
问题内容: 我想为一组SQL查询创建一个过滤器,以便用户最多可以通过三个值过滤SQL SELECT。用户界面具有三个文本框,每个文本框都将绑定到SQL表中的列名。用户可以通过这些文本框提供一个,两个或三个条件。 到目前为止,这就是我所拥有的。我知道这些声明将不起作用,但是我找不到解决该问题的方法。(使用不会返回任何结果。 问题答案: 如果我正确遵循,您想根据所有填充变量过滤结果,以处理未填充变量,
因此,为了提供搜索功能,我可以进行多个连接。我开始使用带有@query表示法的JPQL,但我必须对每个参数进行检查,结果一团糟。我开始研究其他选项,我看到了关于QueryDSL、标准和规范的东西,但我不确定我应该关注和学习哪一个。不幸的是,我不知道很多关于这个主题,我希望有人能指出我在正确的方向,以一个很好的实现这个搜索。谢谢!
我试图创建一个JDialog框架,它将有一个背景图像和一个交互式JPanel。在这种情况下,JDialog将代表一个“战斗”领域,单位将能够被选择和移动。游戏是以太空为基础的,所以会有一个船的阵列列表,可能还有一个星球物体需要防御。 我已经能够重写paintComponent来绘制一个表示“行星”的粗糙圆圈,但无法获得要显示的背景JLabel图像。然后我可以显示背景JLabel,但看不到圆圈。理想
问题内容: 静态变量只有实例(也就是说,它们是类的一部分)。例如:Math.pi 有什么办法可以有多个静态变量实例吗?我听说有一些与Classloader相关的东西吗? 问题答案: 如果发现需要一个静态变量的多个实例,则强烈表明您不应该首先使用静态变量。 是的,如果同一类加载到不同的类加载器中,则该类的每个副本将具有其自己的静态变量。但是,唯一可以静态引用这些静态变量的代码将是由同一类加载器加载的
主要内容:Struts2 <s:checkboxlist> 示例,1. 动作 - Action,2. 结果页面,3. struts.xml,5. 实例,参考这里创建一个Web工程:struts2checkboxlist,来演示在多个复选框如何设置的默认值,整个项目的结构如下图所示: 在Struts2,可以使用<s:checkboxlist>标签来使用相同的名称来创建多个复选框。唯一的问题是如何把握变量中的多个检查值? 例如, 一个多复选框以“红”,“黄”,“蓝”和“绿色”为选项。如果有多个选项被
在Java官方文档中,它说