我有几个带String和Long值的可选字段:
Optional<Long> id;
Optional<String> name;
Optional<String> lastname;
Optional<Long> number;
....
我想返回包含所有值的List。如果例如可选&#34; name&#34;不存在,应该存储空字符串。方法的结果应该是List,其值为e.q:&#34; 1&#34;,&#34; John&#34;,&#34;&#34;,&#34; 5&#34;。
我做了流:
Stream fields = Stream.of(id, name, lastname, number);
但我不知道接下来会发生什么。
问候。
答案 0 :(得分:8)
您可以使用:
List<String> list = Stream.of(id, name, lastname, number)
.map(op -> op.map(o -> o.toString()).orElse(""))
.collect(Collectors.toList());
在流中的每个可选项中,您将使用String
类中的toString()
将其映射到Object
版本中,对于null
,您将其映射为空String
。然后,你会把它收集到列表中。
答案 1 :(得分:2)
您可以使用流的map方法来操作流的内容,如下面的代码:
fields.map(field -> field.orElse("").toString());
可选项还有一个map方法,可以在操作流时使用:
fields.map(field -> field.map(x -> x.toString()).orElse(""));
答案 2 :(得分:0)
List<String> ls = Stream.of(a, b).filter(o -> o != null && !o.trim().equals("")).map(o -> o instanceof Long ? String.valueOf(o) : o).collect(Collectors.toList());
答案 3 :(得分:0)
这有效:
List<String> result = fields.map(o -> o.orElse("")) // provide default value
.map(o -> o.toString()) // cast to String
.collect(Collectors.toList()); // collect into List