请注意"first"赢了't always return the first thing you put in the collection, and may only make sense for ordered collections. Maybe that is why there isn' t get(item) 调用,因为订单不一定保留 .
List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
0
在Java 8中,您可以使用许多运算符,例如 limit
/**
* Operator that limit the total number of items emitted through the pipeline
* Shall print
* [1]
* @throws InterruptedException
*/
@Test
public void limitStream() throws InterruptedException {
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 2, 3)
.stream()
.limit(1)
.collect(toList());
System.out.println(list);
}
11 回答
Iterables.get(yourC, indexYouWant)
因为,如果您正在使用收藏集,那么您应该使用Google收藏集 .
看起来这是最好的方法:
很好的问题......起初,它似乎是对
Collection
界面的疏忽 .请注意"first"赢了't always return the first thing you put in the collection, and may only make sense for ordered collections. Maybe that is why there isn' t
get(item)
调用,因为订单不一定保留 .虽然看起来有点浪费,但可能没有您想象的那么糟糕 .
Iterator
实际上只包含集合中的索引信息,而不是通常是整个集合的副本 . 调用此方法会实例化Iterator
对象,但这确实是唯一的开销(而不是复制所有元素) .例如,查看
ArrayList<String>.iterator()
方法返回的类型,我们看到它是ArrayList::Itr
. 这是一个内部类,它只是直接访问列表的元素,而不是复制它们 .请确保检查
iterator()
的返回,因为它可能为空或null
,具体取决于实现 .在java 8中:
对于旧版本的java,在Guava _2589679中有一个getFirst方法:
Collection
中没有"first"项目,因为它只是一个集合 .从Java doc的Collection.iterator()方法:
所以你不能 .
如果使用 another 等 another 接口,则可以执行以下操作:
但直接来自Collection,这是不可能的 .
听起来你的收藏品想要像列表一样,所以我建议:
在Java 8中,您可以使用许多运算符,例如 limit
你可以做一个演员 . 例如,如果存在一个具有此定义的方法,并且您知道此方法返回List:
在调用它之后,你需要第一个元素,你可以这样做:
如果您知道该集合是一个队列,那么您可以将该集合转换为队列并轻松获取它 .
您可以使用几种结构来获取订单,但您需要投射到它 .
它完全取决于您使用的实现,无论是arraylist链表还是其他set实现 .
如果设置了那么你可以直接获取第一个元素,它们可以在集合上进行特技循环,创建一个值为1的变量,并在该循环之后标记值为1时获取值 .
如果它是list的实现,那么通过定义索引号很容易 .
Guava提供
onlyElement
Collector
,但只有在您希望集合只有一个元素时才使用它 .如果您不确定有多少元素,请使用
findFirst
.你可以这样做:
Collection的javadoc给出了数组元素的以下警告: