相关疑难解决方法(0)

Java 8流逆序

一般问题:反转流的正确方法是什么?假设我们不知道流包含哪种类型的元素,那么反转任何流的通用方法是什么?

具体问题:

IntStream提供范围方法来生成特定范围内的整数IntStream.range(-range, 0),现在我要反转它切换范围从0到负不起作用,我也不能使用Integer::compare

List<Integer> list = Arrays.asList(1,2,3,4);
list.stream().sorted(Integer::compare).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

IntStream我会得到这个编译器错误

错误:(191,0)ajc:sorted()类型中的方法IntStream不适用于参数(Integer::compare)

我在这里想念的是什么?

java java-8 java-stream

135
推荐指数
13
解决办法
14万
查看次数

获取流的最后一个元素的最有效方法

Stream没有last()方法:

Stream<T> stream;
T last = stream.last(); // No such method
Run Code Online (Sandbox Code Playgroud)

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

java java-8 java-stream

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

如何在java中获取数组中的第一个和最后一个元素?

如果我有一系列双打:

[10.2, 20, 11.1, 21, 31, 12, 22.5, 32, 42, 13.6, 23, 32, 43.3, 53, 14, 24, 34, 44, 54, 64, 15.1, 25, 35, 45, 55, 65.3, 75.4, 16, 26, 17.5,]
Run Code Online (Sandbox Code Playgroud)

我想得到第一个元素和最后一个元素

firstNum = 10.2

lastNum = 17.5
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

java arrays

28
推荐指数
3
解决办法
13万
查看次数

Stream.max()如何处理相等?

虽然我怀疑答案是"它未指定"......

如果有多个"最大/最低"的元素Stream,其中Comparator传递到最大最小的方法认为等于(返回0)时,它指定某处哪个元素会被发现?

java java-8 java-stream

16
推荐指数
2
解决办法
704
查看次数

有序流上的减少是按顺序减少的吗?

我有一个ListA,B,C.

C reduce A reduce B != A reduce B reduce C (但是,减少(B减少C)是可以的).

换句话说,我的还原操作是关联的,但不是可交换的.

java是否对有序顺序流(例如列表中的默认流)执行减少将始终根据遭遇顺序进行减少?也就是说,java会重新排序减少(这样B减少A而不是A减少B)?

(希望这很清楚).

编辑添加一个小演示,也许有助于澄清

Stream.of(" cats ", " eat ", " bats ")
  .reduce("", (a, b) -> a + b); // cats eat bats
Run Code Online (Sandbox Code Playgroud)

有了上述,输出可能是"蝙蝠猫吃"​​或"吃蝙蝠猫"?是否在规范的某处保证了?

java java-8 java-stream

7
推荐指数
2
解决办法
1165
查看次数

番石榴的 Streams::findLast 实现

我正在研究Streams::findLastfrom guava的实现,在试图理解它的同时,有几件事我根本无法理解。这是它的实现:

public static <T> java.util.Optional<T> findLast(Stream<T> stream) {
    class OptionalState {

        boolean set = false;
        T value = null;

        void set(@Nullable T value) {
            set = true;
            this.value = value;
        }

        T get() {
            checkState(set);
            return value;
        }
    }
    OptionalState state = new OptionalState();

    Deque<Spliterator<T>> splits = new ArrayDeque<>();
    splits.addLast(stream.spliterator());

    while (!splits.isEmpty()) {
        Spliterator<T> spliterator = splits.removeLast();

        if (spliterator.getExactSizeIfKnown() == 0) {
            continue; // drop this split
        }

        // Many spliterators will have trySplits that are SUBSIZED …
Run Code Online (Sandbox Code Playgroud)

java guava java-8 java-stream

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

在Lambda表达式中设置对象

如何在lambda表达式中将我的对象设置为另一个对象?我有错误

lambda表达式中使用的变量应为final或有效为final

使用以下代码:

public MyObj myFun(MyObj o) {
   MyObj obj = null;

   myObjList.stream().filter(o -> ...).forEach(o -> {
      // I do some stuff here

      // I need here set obj to o, but I got error
      obj = o;
   });

   return myObj; // I need return found obj or null;
}
Run Code Online (Sandbox Code Playgroud)

java lambda

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

标签 统计

java ×7

java-8 ×5

java-stream ×5

arrays ×1

guava ×1

lambda ×1