小编Fab*_*ato的帖子

为什么不鼓励使用immutable null?

我目前正在使用Immutable库从我的Web应用程序生成JSON对象.

看一下这一章,第一行说:

不鼓励使用可空属性.

所以我的问题是:

1)为什么?null对象有什么问题?

2)如果我使用的是第三个对象的包装器并且我不知道item是否为null,那么使用分类构建器代码将失败:

MyImmutableWrapperObject
    .builder().
    .mobile(input.getMobile()) // don't know if null or not
    .build();
Run Code Online (Sandbox Code Playgroud)

有没有最佳解决方案?

编辑:

@JsonProperty("mobile")
public abstract Optional<String> mobile();  

...

// composing builder
if (input.getMobile() != null)
        builder.mobile(input.getMobile());
Run Code Online (Sandbox Code Playgroud)

制作的json是:

"mobile": {
    "present": false
},
Run Code Online (Sandbox Code Playgroud)

我怎样才能完全删除空白字段?

我读了这个,但它使用gson.toJson返回一个String对象,这不是我想要的方式.

POSTEDIT:

我刚刚发现即使存在,Optional也没有显示实际值,但它只显示true/false值,所以我不需要它.

java nullable guava java-8 immutables-library

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

用于接收参数的bash中的SED

这是我的脚本,我希望用户接收参数--path和--mode,例如:

./myscript.sh --path =/hello --mode = a

脚本

#!/usr/bin/env bash

set -e

HELP=false
MODE=false
PATH=false

for arg in "$@"
do
    case "$arg" in
        -h|--help) 
            HELP=true
            ;;      
        --mode*)
            MODE=`echo $arg | sed -e 's/^[^=]*=//g'`
            ;;
        --path*)
            PATH=`echo $arg | sed -e 's/^[^=]*=//g'`
            ;;      
        *)
            echo "wrong argument: $arg"
            echo "type --help for supported parameters"
            exit 1
        ;;

    esac
done
Run Code Online (Sandbox Code Playgroud)

当我尝试执行时,我收到此错误:

line 19: sed: command not found
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

bash sed

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

将对象转换为 List&lt;String&gt;

我有一个Map<String,Object>包含元素值的List<String>

现在我需要过滤后者并检索包含@.

我做得最好的是:

    Map<String, Object> map = new HashMap<>();
    map.put("alias", List.of("Mxxx", "fstarred@mymail.org"));

    final Object obj = map.get("alias");
    final List lst = (List) obj;
    final Object output= lst.stream()
            .filter(o -> ((String) o).contains("@"))
            .findFirst()
            .orElse(null);
Run Code Online (Sandbox Code Playgroud)

但是看起来很冗长,主要需要:

  1. 最终转换为输出字符串
  2. 传递给过滤器的每个对象的强制转换

对于上面发出的,我试过了 .map(String.class::cast)

  1. lst.stream()
  2. filter(o -> ((String) o).contains("@"))

这些方法都没有奏效。

任何提示?

java lambda

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

标签 统计

java ×2

bash ×1

guava ×1

immutables-library ×1

java-8 ×1

lambda ×1

nullable ×1

sed ×1