从 Java 集中获取 *any* 值的好方法?

2022-08-31 11:37:58

给定一个简单的方法,什么是从中获取任何值的好方法(快速,几行代码) ?Set<T>Set

使用 ,很容易:List

List<T> things = ...;
return things.get(0);

但是,对于 a ,没有方法,因为 s 不是有序的。Set.get(...)Set


答案 1

A 是一个 ,因此迭代到第一个元素的工作原理是:Set<T>Iterable<T>

Set<T> things = ...;
return things.iterator().next();

番石榴有一种方法可以做到这一点,尽管上面的片段可能更好


答案 2

由于存在流,因此您也可以这样做,但是您必须使用类 。 是元素的包装类或显式无元素(避免 Nullpointer)。java.util.OptionalOptional

//returns an Optional.
Optional <T> optT = set.stream().findAny();

//Optional.isPresent() yields false, if set was empty, avoiding NullpointerException
if(optT.isPresent()){
    //Optional.get() returns the actual element
    return optT.get();
}

编辑:正如我自己经常使用的那样:有一种方法可以访问元素或获取默认值,以防它不存在:
返回元素,或者如果不存在,则返回。 可能是,顺便说一句。OptionaloptT.orElse(other)otherothernull


推荐