我目前正在使用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值,所以我不需要它.
这是我的脚本,我希望用户接收参数--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)
怎么了 ?
我有一个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)
但是看起来很冗长,主要需要:
对于上面发出的,我试过了 .map(String.class::cast)
lst.stream()filter(o -> ((String) o).contains("@"))这些方法都没有奏效。
任何提示?