相关疑难解决方法(0)

在Scala的case类和类字段中使用Optional是否有代码味道?

在Stackoverflow上已经有很多关于在Java 中使用Optional的正确方法的讨论(像这样的讨论,或者这个)

截至目前,在Java中使用Optional作为类成员被广泛认为是一种代码气味,甚至因故意不实现Serializable接口而气馁.此外,我们应该在DTO,构造函数和方法的输入参数中避免它.从视图中的一切OOP点我迄今大约读可选吸引我的原因.

我的问题是,Scala的FP方面是否会以某种方式改变某些东西我们应该使用Optional?特别是因为Scala 中Optional的实现似乎更丰富.我发现很多文章描述了如何在Scala中使用它,但是没有一篇文章在我应该使用它时何时耗尽主题,何时不应该使用它.

java oop functional-programming scala

8
推荐指数
2
解决办法
1029
查看次数

如何在java中使用Optional来检查是否为null以及是否具有特定值?

假设我的项目中有这个代码:

public List<T> getAll(Integer parameter) {
    if(parameter != null && parameter > -1) {
        // do something here
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何进行检查Optional而不是使用if,或者是否还有其他可以使用的东西?

java functional-programming if-statement optional java-8

7
推荐指数
3
解决办法
3400
查看次数

Java List <T>有条件地添加Optional <T>

是否有一个库(例如Apache,Guava)提供了List<T>一个方法

void add(Optional<T> element)
Run Code Online (Sandbox Code Playgroud)

如果元素存在,则添加元素(如果是,则为无操作!element.isPresent())?显然很容易实现,但似乎有人可能已经做过这样一个显而易见的事情.

java collections optional java-8

6
推荐指数
1
解决办法
132
查看次数

我可以实际从lambda返回从方法返回并中断其执行吗?

例如:

private String test(Optional myOptional)
{
    myOptional.ifPresent(() -> return "1");
    return "0";
}
Run Code Online (Sandbox Code Playgroud)

所以当我调用test(myOptional)时,它将返回"1";

java lambda optional

5
推荐指数
1
解决办法
3930
查看次数

在DTO中初始化文件

我的一个朋友建议我在DTO中初始化类型为(ArrayList)且仅类型为ArrayList的DTO字段,以避免NullPointerException

public class fooDto {
    private SomeClasse someClasse = new SomeClasse();
    private ArrayList<Bar> bars = new ArrayList();
}
Run Code Online (Sandbox Code Playgroud)

我们应该做他的吗?这是一个好习惯吗

以其他方式,是否应该使用“ = new SomeClasse()”?

java dto

4
推荐指数
1
解决办法
790
查看次数

复制番石榴可选

有没有一种“不错”的方法来创建 Optional 对象的副本?

例如,说我有一个方法

Optional<Obj> doSomeStuff(Optional<Obj> input){
   if(something){
     return Optional.copyOf(input); // does this exist in some Guava library or something?
   }
   // ...
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想要具有不变性,这样我就不会传递相同的 Optional ,如果something被触发,那么我想确保我创建一个全新的 Optional 与 Optional 的内容相同input(无论它是否为空) .

有什么干净的方法可以做到吗?该Optional.copyOf方法不存在。

java guava

3
推荐指数
1
解决办法
130
查看次数

OptionalInt作为输入参数

我读了为什么Java 8的Optional不能用在参数中.但是Optional(Int|Long|Double),有什么理由反对使用它们作为输入参数?

正如我所理解的那样,它们不能是空的,而是null(Optional<X>输入参数中的主要参数参数),但可能还有其他的珊瑚礁?我应该使用OptionalIntInteger使用null而不是null重视?

java optional java-8

2
推荐指数
1
解决办法
260
查看次数

来自Java的条件提取值可选

我试图找到使用Java最简洁(和有意义)的方法,Optional从a读取第一个值Optional<String>并返回String(如果存在),或返回"NOT_FOUND".这是我正在使用的代码:

public static String getValue(Optional<String> input) {
    return input.ifPresent(val -> val.get()).orElse("NOT_FOUND")
}
Run Code Online (Sandbox Code Playgroud)

Optional的方法显然有非常特殊的用途,但API让我感到困惑.

更新(4/13/2018): 我的问题中的代码不正确,因为如果我认为val是Optional中的值,那么val.get()没有任何意义.谢谢你指出这一点,@ okttman.

另外,我在接受的答案的注释中添加了我的问题的另一部分,即我需要一种方法来操作String值,如果存在,在返回之前.将orElse("NOT_FOUND")仍然适用,如果选不包含值.那么OptionalAPI 的可接受用途是什么来实现以下目标呢?

public static String getValue(Optional<String> input) {
    return input.isPresent() ? input.get().substring(0,7).toUpperCase() : "NOT_FOUND";
}
Run Code Online (Sandbox Code Playgroud)

@Aominè的回答和后续评论都涉及这个问题的两个部分.

java optional

1
推荐指数
1
解决办法
735
查看次数

使用Java 8可选 - 转换逻辑

我正在尝试学习如何Optional在Java中使用- 但这似乎不正确我在做什么.

User user = null;

public AuthCheck(User user) throws Exception {
    if (user == null) {
        throw new Exception("No user!");
    }
    if (!(user.getStuff() != null && !user.getStuff().isEmpty())) {
        throw new Exception("User has no stuff");
    }
    this.user = user;
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用Optional以下方法转换它:

Optional<UserOptional> user;

public AuthCheckOptional(Optional<UserOptional> user) throws Exception {
    user.orElseThrow(() -> new Exception("No User!"));

    user.map(UserOptional::getStuff)
        .orElseThrow(() -> new Exception("User has no stuff"));

    this.user = user;
}
Run Code Online (Sandbox Code Playgroud)

我想我不需要两次单独检查.另外我相信我已经改变了逻辑,因为IsEmpty()没有发生.

java exception-handling optional java-8

1
推荐指数
1
解决办法
187
查看次数