当前位置: 首页 > 面试题库 >

从流中获取最后n个元素

王宏扬
2023-03-14
问题内容

我想知道是否有替代

List<X> lastN = all.subList(Math.max(0, all.size() - n), all.size());

使用


问题答案:

定制收集器可以这样写:

public static <T> Collector<T, ?, List<T>> lastN(int n) {
    return Collector.<T, Deque<T>, List<T>>of(ArrayDeque::new, (acc, t) -> {
        if(acc.size() == n)
            acc.pollFirst();
        acc.add(t);
    }, (acc1, acc2) -> {
        while(acc2.size() < n && !acc1.isEmpty()) {
            acc2.addFirst(acc1.pollLast());
        }
        return acc2;
    }, ArrayList::new);
}

并像这样使用它:

List<String> lastTen = input.stream().collect(lastN(10));


 类似资料:
  • 假设我有这样一个列表: 是否可以使用Java8流从该列表中每隔一秒获取一个元素以获得以下内容? 或者甚至每三个元素? 基本上,我正在寻找一个函数来获取流的每n个元素:

  • 问题内容: 是否有一些函数可以从某些列表中返回N个最高元素? 即,如果返回单个最高元素sth。就像会给我返回10个最高数字的列表(如果较小则更少)。 或获得这些有效的简便方法是什么?(除了明显的规范实现;而且,没有这样的事情需要首先对整个列表进行排序,因为与规范解决方案相比效率不高。) 问题答案: :

  • 本文向大家介绍Elm从列表中获取第n个元素,包括了Elm从列表中获取第n个元素的使用技巧和注意事项,需要的朋友参考一下 示例 List不支持“随机访问”,这意味着要从列表中获取第五个元素要比第一个元素花费更多的工作,因此没有任何List.get nth list功能。必须从头开始(1 -> 2 -> 3 -> 4 -> 5)。 如果您需要随机访问,则使用随机访问数据结构(例如)可能会获得更好的结果

  • 问题内容: 流没有方法: 获取最后一个元素(或对于空Stream为null)的最优雅和/或最有效的方法是什么? 问题答案: 做一个简单地返回当前值的归约:

  • Stream没有方法: 获取最后一个元素(或空流为null)的最优雅和/或最有效的方法是什么?

  • 问题内容: 我有一个int数组,想要获取最小10个(任何n个)元素的索引。我怎样才能做到这一点? 问题答案: 创建一个包含数字和索引的对象,然后创建这些对象的数组,然后执行Array.Sort(arrayset [],比较器)java docs 。然后,您可以从已排序的数组中挑选出前x个项目。 编辑:像这样… [我曾经用它来根据’距离’进行排序