给出的是需要过滤的字符串列表。我知道结果总是一个字符串。我想得到这个价值。有没有比这更好的解决方案
List<String> bla = new ArrayList();
bla
.stream()
.filter(s->s.equals("something"))
.collect(Collectors.toList())
.get(0);
像getOrDefault这样的东西会很棒。
答案 0 :(得分:2)
您可以使用.findFirst()
。
但是,由于您确定列表中只有1个要搜索的元素,因此您可以使用.findFirst()
或.findAny()
返回{{} 3}}。
然后,您只需拨打此Optional
课程的Optional即可获取您的对象。
List<String> bla = new ArrayList();
String bla2 = bla
.stream()
.filter(s -> s.equals("something"))
.findAny()
.get();
System.out.println(bla2);
示例强>
import java.util.stream.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
List < String > bla = new ArrayList();
bla.add("one");
bla.add("something");
bla.add("two");
String bla2 = bla
.stream()
.filter(s -> s.equals("something"))
.findAny()
.get();
System.out.println(bla2);
}
}
<强>输出强>
something
答案 1 :(得分:2)
您可以使用findFirst
返回Optional
个对象,然后使用Optional.orElseGet
设置默认值。
Optional<String> optString = bla.stream()
.filter(s->s.equals("something")).findFirst();
String somethingValue = optString.orElseGet(() -> "DEFAULT_VALUE");
此外,我强烈建议,不要直接调用get()
方法,因为它会抛出NoSuchElementException
,查看get()
了解详细信息,但您可以使用orElseGet
,如上所示。
答案 2 :(得分:-1)
而不是使用
bla.stream()
.filter(s->s.equals("something"))
.collect(Collectors.toList())
.get(0);
您可以使用以下
bla
.stream()
.filter(s->s.equals("something"))
.collect(Collectors.toList());
get(0)
不是必需的