一般问题:反转流的正确方法是什么?假设我们不知道流包含哪种类型的元素,那么反转任何流的通用方法是什么?
具体问题:
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
)
我在这里想念的是什么?
Stream没有last()
方法:
Stream<T> stream;
T last = stream.last(); // No such method
Run Code Online (Sandbox Code Playgroud)
获取最后一个元素的最优雅和/或最有效的方法是什么(空流为null)?
如果我有一系列双打:
[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)
我该怎么做?
我有一个List
A,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)
有了上述,输出可能是"蝙蝠猫吃"或"吃蝙蝠猫"?是否在规范的某处保证了?
我正在研究Streams::findLast
from 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) 如何在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)