相关疑难解决方法(0)

Java Arrays如何在开头添加元素

我需要在ArrayList队列中添加元素,但是当我调用函数添加元素时,我希望它在数组的开头添加元素(因此它具有最低的索引)并且如果数组有10个元素添加删除最旧元素(索引最高的元素)的新结果.

有没有人有什么建议?

java arrays stack arraylist

156
推荐指数
4
解决办法
25万
查看次数

为什么ArrayDeque比LinkedList更好

我试图理解为什么Java的ArrayDeque优于Java的LinkedList,因为它们都实现了Deque接口.

我几乎没有看到有人在他们的代码中使用ArrayDeque.如果有人对ArrayDeque的实现方式有了更多了解,那将会很有帮助.

如果我明白了,我会更有信心使用它.我无法清楚地了解JDK实现它管理头尾引用的方式.

java linked-list deque arraydeque

141
推荐指数
5
解决办法
6万
查看次数

在一行中获取流/列表的最后一个元素

如何在以下代码中获取流或列表的最后一个元素?

哪里data.careasList<CArea>:

CArea first = data.careas.stream()
                  .filter(c -> c.bbox.orientationHorizontal).findFirst().get();

CArea last = data.careas.stream()
                 .filter(c -> c.bbox.orientationHorizontal)
                 .collect(Collectors.toList()).; //how to?
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,获得第一个元素filter并不难.

然而,获得单行中的最后一个元素是一个真正的痛苦:

  • 好像我不能直接从a获得它Stream.(它只对有限流有意义)
  • 这似乎也不能得到像first()last()List接口,这实在是一种痛苦.

我没有看到任何关于不在接口中提供first()last()方法的论据List,因为其中的元素是有序的,而且大小是已知的.

但根据原始答案:如何获得有限的最后一个元素Stream

就个人而言,这是我能得到的最接近的:

int lastIndex = data.careas.stream()
        .filter(c -> c.bbox.orientationHorizontal)
        .mapToInt(c -> data.careas.indexOf(c)).max().getAsInt();
CArea last = data.careas.get(lastIndex);
Run Code Online (Sandbox Code Playgroud)

然而,它确实涉及使用indexOf每个元素,这很可能不是您通常想要的,因为它可能会影响性能.

java list java-8 java-stream

100
推荐指数
5
解决办法
7万
查看次数

如何在Java 8中以相反的顺序从列表中获取有序流

是否有一种理智的方式从列表中获取有序流(具体来说,数组列表,但它应该无关紧要)流式元素与它们在原始列表中的方式相反?

我正在寻找一种不涉及缓冲数据的解决方案(收集器,另一个列表,数组等,因为它们复制了浪费的容器),或者使用Collections.reverse(因为它修改了列表).

到目前为止,我在这里看到的最干净的方法之一是实现我自己的版本的SpliteratorORDERED和在列表中反向前进,或实施Iterator反向迭代是,并使用Spliterators.spliteratorUnknownSize(iterator,ORDERED)它.

注意这个问题不同于Java 8流逆序:其他问题询问如何反转流(一般情况下这是不可能的),并且答案提供了以某种方式反转源(我不想这样做),然后传输反向源.逆转源的成本是O(N),如果可能的话我想完全避免它.

java java-8 java-stream

18
推荐指数
5
解决办法
1万
查看次数

反转队列<Integer>并将其转换为int数组

我有一个Queue<Integer>声明为Queue<Integer> queue=new LinkedList();,我需要反转其中的元素顺序,然后将其转换为int数组.我在下面写了代码:

Collections.reverse((List)queue);
int[] res=queue.stream().mapToInt(Integer::intValue).toArray();
Run Code Online (Sandbox Code Playgroud)

此代码有两个问题:

  1. 表达铸造(List)queue;
  2. 我想知道是否有单线解决方案.

那么我们有更优雅的方式来做到这一点吗?


澄清问题:

队列是否反转并不重要.我需要的是反转元素的int数组.

java queue collections

11
推荐指数
3
解决办法
996
查看次数

反向排序流

我想反向排序下面的流,但得到编译时错误"The method sorted() in the type IntStream is not applicable for the arguments ((<no type> o1, <no type> o2) -> {})".谁能纠正这个

IntStream.range(1, 100)
         .filter(x -> x%2 != 0)
         .sorted((o1,o2) -> -o1.compareTo(o2))
         .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java sorting java-8 java-stream

10
推荐指数
1
解决办法
763
查看次数

ZonedDateTime 到早期 Android 中 Java 8 之前的日期

我正在尝试替换该ZonedDateTime.toInstant方法,因为它仅在适用于 Android 的 API 26 之后可用。
但是我的应用程序应该支持 API 19。
我想将 ZonedDateTime 转换为 Date 以便我可以执行以下操作:

final Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
final long millis = calendar.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

我想实现如下:
我想计算当前日期和另一个日期之间的差异,以秒、分钟、小时为单位,......最高可能的单位获胜,所以我会得到例如5 days ago结果。

java android date zoneddatetime

9
推荐指数
3
解决办法
3034
查看次数

Stream API,有没有办法使用 instream.range 进行降序迭代?

例如, Instream.range(0,10)- 是从 0 索引迭代到 10。

Instream.range(10,0)- 但是从 10 到 0 不起作用,如何使用 Stream API 做到这一点?

java java-stream

6
推荐指数
1
解决办法
456
查看次数

java.util.List的descendingIterator

LinkedList可以使用升序或降序迭代器迭代,如下所示:

       LinkedList<Object> list = new LinkedList<Object>();
       ...
   StringJoiner sJ1 = new StringJoiner(" ");
   list.iterator().forEachRemaining(a -> sJ1.add(a.toString()));
   System.out.println("averse: \n" + sJ1.toString());

   StringJoiner sJ2 = new StringJoiner(" ");
   list.descendingIterator().forEachRemaining(a -> sJ2.add(a.toString()));
   System.out.println("reverse: \n" + sJ2.toString());
Run Code Online (Sandbox Code Playgroud)
averse: 
Hello 2 Chocolate 10
reverse: 
10 Chocolate 2 Hello
Run Code Online (Sandbox Code Playgroud)

但是descendingIterator不适用于ListArrayList.有没有在列表说明任何解决办法,或者为什么的descendingIterator缺席的名单

问题类似于可以为java中的每个循环以相反的顺序执行吗?.但所有答案都建议使用临时解决方案或第三方库.

可能有使用溪流可能吗?(不幸的是,我的谷歌搜索只给出了流Java 8流逆序的缺失标准反转)

正如我所提到的,我的问题与关于流的问题有关,但是:

  • 使用stream只是一个选项,问题是关于java.util.Iteratorjava.util.List
  • 该问题的答案仅解决了部分案例,但表明缺乏方便的一般反向.如果我没有错过术语List是有序集合,对可比项目进行排序,实现顺序会缩小范围.

java linked-list arraylist java-8

4
推荐指数
2
解决办法
1753
查看次数

列表中是否有任何类型的reverse_iterator,只是为了反转List?(Java8流解决方案首选)

我想知道在List实现中是否存在某种类型的reverse_iterator(如c ++)ArrayList<Integer>.即,我想从列表的末尾而不是从头开始迭代?

有没有Java8流解决方案?

java collections java-8

1
推荐指数
1
解决办法
96
查看次数