如何使用Java 8 Streams从列表中获取下一个元素?如果我正在迭代List,我想比较当前列表中的下一个元素,它是否可以使用Java 8 Stream?Java 8 Stream,如何比较当前元素与下一个元素?
9
A
回答
7
一种方法是生成索引的IntStream
,并按索引获取List
元素。如果List
支持随机访问(即如果您的List
是LinkedList
,这将是一个坏主意,因为list.get(i)
不需要一定的时间),这只是有效的。
例如:
IntStream.range(0,list.size()-1).forEach(i -> {
doSomething(list.get(i),list.get(i+1));
});
另一种方式是最后一个元素存储在数组中:
List<Element> list = ...
Element[] arr = new Element[1];
list.stream().forEach(e -> {
if (arr[0] != null)
doSomething(arr[0],e);
arr[0]=e;
});
这将只用于顺序流工作。
11
我的免费StreamEx库允许您使用额外的pairMap
中间操作来处理流元素对。就像这样:
StreamEx.of(input).pairMap((current, next) -> doSomethingWith(current, next));
凡input
是Collection
,阵列或Stream
。例如,这样你可以很容易地检查是否输入进行排序:
boolean isSorted = StreamEx.of(input)
.pairMap((current, next) -> next.compareTo(current))
.allMatch(cmp -> cmp >= 0);
也有forPairs
终端操作这是一个forEach
模拟所有对输入元素:
StreamEx.of(input).forPairs((current, next) -> doSomethingWith(current, next));
这些功能有很好的合作任何流源(随机访问或不),并完全支持并行流。
+0
太棒了。感谢您的解释。 – bhupen
0
你总是做下列之一:
- 将您的流包含流
- 过程的最后几个元素的“历史”元素的流你在当前处理的元素这样的方式流被认为是“下一个”元素,并且之前处理的元素被认为是“当前”元素。这两种解决方案的
实现可以看出,在这个线程:Is it possible to get next element in the Stream?
0
我不得不这样做,比较流(原来的数组)的元素的差异。 所以我用的方法作为参数传递给该.MAP(该UniaryOperator)预计如下...和它的工作对我来说没有任何特殊的小物件的:
import java.util.Arrays;
class streamDiffUtil {
public static void main(String[] args) {
int[] elements = {1,2,5};
int result = Arrays.stream(elements)
.map(value -> calcMaxDiff(value, elements))
.max()
.getAsInt();
System.out.println(result);
}
private static int calcMaxDiff(int j, int[] elements) {
return Arrays.stream(elements)
.map(value -> Math.abs(j-value))
.max().getAsInt();
}
}
什么将是很好的是要懂得方法calcMaxDiff等同于.map签名中的UnaryIntOperator。这超出了我。 希望这可以帮助你。根据目标,可以使用
0
相关问题
- 1. knockoutjs将当前行元素与前一行元素进行比较
- 2. XSLT - 前同辈的元素与当前的节点元素比较
- 3. Xquery,将数组中的元素与下一个元素进行比较
- 4. 比较元素与以前沿轴
- 5. 如何将列表元素与下一个元素进行比较以生成此元素?
- 6. C - 比较一个数组中的元素与以前的所有元素
- 7. Java中的元素比较
- 8. 比较元素
- 9. 比较元素
- 10. 如何比较ArrayList元素
- 11. 如何比较同一个表中的一个元素到另一个元素
- 12. 如何比较一个元素的margin-left与一个负值
- 13. 在当前元素之后选择下一个DOM元素
- 14. jQuery:获取当前元素后的立即下一个元素
- 15. 如何比较数组中的元素与SList中的元素?
- 16. 如何比较阵列元素与ArrayList中另一个阵列的元素?
- 17. 与foreach中的下一个元素进行比较javascript
- 18. html元素比较
- 19. java的实现比较两个元素
- 20. Java如何将一个数组的元素与同一个数组的所有其他元素进行比较
- 21. 如何比较以前的节点元素值与foreach中的当前节点元素值xslt
- 22. 如何比较两个向量元素使用循环元素
- 23. 比较多个元素
- 24. 如何从jQuery中的当前元素开始选择下一个“n”元素?
- 25. 如何比较2个DOM元素?
- 26. 比较两个列表元素与LINQ
- 27. Groovy元素比较
- 28. Haskell比较元素[[]]
- 29. ArrayList元素比较
- 30. 比较jsoup元素
迭代如何?你如何确定当前和下一个元素?为什么你觉得需要用流来做到这一点? –
你的目标是? – zeroflagL
我的目标是比较列表中的两个连续元素,或者我想检查它们是否相等。 – bhupen