Tag: foreach

Java Stream:forEach和forEachOrdered之间的区别

前提 :我已经阅读过这个问题和其他问题 ,但我需要一些澄清。 我知道Stream.forEach方法在处理并行流时会产生差异(不仅仅是这个),这就解释了为什么会这样 //1 Stream.of(“one “,”two “,”three “,”four “,”five “,”six “) .parallel() .forEachOrdered(item -> System.out.print(item)); 版画 one two three four five six 但是当涉及到中间操作时,当并行化流时,不再保证顺序。 所以这段代码 //2 Stream.of(“one “,”two “,”three “,”four “,”five “,”six “) .parallel() .peek(item -> System.out.print(item)) .forEachOrdered(item -> System.out.print(“”)); 会印出类似的东西 four six five one three two 说forEachOrdered方法只影响其自身执行中元素的顺序是否正确? 直观地说,我想//1例子与…完全相同 //3 Stream.of(“one “,”two “,”three “,”four “,”five […]

Java For Loop差异

这些语句在Java的内存占用和效率方面完全相同吗? 第一 : Object[] array = new Object[100]; int i = 0; for (; i < array.length; i++){ Object o = array[i]; //do something } 第二 : Object[] array = new Object[100]; for (int i = 0; i < array.length; i++){ Object o = array[i]; //do something } 第三 : Object[] array = new Object[100]; […]

Java 8 – Streams嵌套ForEach与不同的Collection

我尝试理解新的Java 8 Streams,并且我尝试了几天将嵌套的foreach循环转移到Java 8 Streams中的集合上。 是否有可能重构以下嵌套的foreach循环,包括Java-8-Streams中的if-conditions? 如果是的话会是什么样子。 ArrayList Inq = new ArrayList(); TreeMap Quotations = new TreeMap(); ArrayList tempInqAndQuot = new ArrayList(); ArrayList tempQuotPos = new ArrayList(); for (ClassInq simInq : this.Inq){ if (!simInq.isClosed() && !simInq.isDenied()){ for (Map.Entry Quot: Quotations.entrySet()){ SalesQuot sapQuot = Quot.getValue(); if (sapQuot.getInquiryDocumentNumber().compareTo(simInq.getSapInquiryNumber()) == 0){ simInq.setSAPQuotationNumber(sapQuot.getQuotationDocumentNumber()); tempInqAndQuot.add(simInq); for (Map.Entry quotp : sapQuot.getPosition().entrySet()){ […]

为什么Java 8 Stream forEach方法的行为有所不同?

根据我对java 8 lambda表达式的理解,如果我们在花括号中不包含“ – >”之后的代码,那么将隐式返回值。 但是在下面的示例中, forEach方法期望Consumer和expression返回值,但编译器在Eclipse中没有给出错误。 List messages = Arrays.asList(new StringBuilder(), new StringBuilder()); messages.stream().forEach(s-> s.append(“helloworld”));//works fine messages.stream().forEach((StringBuilder s)-> s.append(“helloworld”)); //works fine messages.stream().forEach(s-> s); // doesn’t work , Void methods cannot return a value messages.stream().forEach(s-> s.toString()); // works fine messages.stream().forEach(s-> {return s.append(“helloworld”);}); // doesn’t work , Void methods cannot return a value messages.stream().forEach((StringBuilder s)-> {return […]

用Java 8 Streams替换传统的newForLoop

因此,最后从Java 6跳到Java 8,我已经阅读了相当数量的Java 8 Streams API。 不幸的是,几乎所有被问到的例子几乎都接近于我想要弄清楚怎么做,但还不够接近。 我拥有的是什么 final List<Function> myList = generateList(); final double myVal = calculate(10); private double calculate(double val) { for (Function function : this.myList) { val += function.apply(val); } return val; } 现在,我已经明白我可以使用.stream().forEach()做类似的事情,但这只适用于foreach和流需要最终变量。 我试图用DoubleStream探索一下得到一个sum() ,但是我需要将当前的和重新应用到每个Function并将该和加到下一个函数中,如上面的代码示例所示。 这可以用纯Stream API吗? 编辑:因此在使用reduce()区域进行测试后,我对执行此类计算所花费的时间进行了简单测试,结果不支持流。 这是一个示例https://gist.github.com/gabizou/33f616c08bde5ab97e56 。 包括来自相当基本测试的日志输出。

Java,哪个线程是顺序流执行的?

在阅读有关流的文档时,我遇到了以下句子: …试图从行为参数中访问可变状态会给你一个错误的选择…如果你没有同步访问该状态,你就会有数据竞争,因此你的代码被破坏…… [1] 如果行为参数确实有副作用…… [没有]保证在同一个线程中执行同一流管道中“相同”元素的不同操作。 [2] 对于任何给定元素,可以在任何时间以及库选择的任何线程中执行该动作。 [3] 这些句子不区分顺序流和并行流。 所以我的问题是: 在哪个线程中执行顺序流的管道? 它总是调用线程还是一个可以自由选择任何线程的实现? 在流是顺序的情况下,哪个线程是forEach终端操作的action参数? 使用顺序流时是否必须使用任何同步? [1 + 2] https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html [3] https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#forEach-java.util.function.Consumer-

使用Java中的每个循环同时迭代两个数组

学生的姓名(String [])和相应的标记(int [])存储在不同的数组中。 我如何使用Java中的每个循环迭代两个数组? void list() { for(String s:studentNames) { System.out.println(s); //I want to print from marks[] alongside. } } 一个简单的方法可能是在同一个循环中使用索引变量。 有好办法吗?

带有动态列的DataTable

我是JSF的新手,只是尝试一个概念certificate来决定它是否对项目有用。 我的POC只包含一个页面,其中包含一些包含一些数据的表格。 列数(以及行数)是动态的,在呈现页面之前从数据库加载。 通过以下内容,我得到两个具有适当行数的静态列,正如我所期望的那样: 我想要做的是在一组…标签周围添加 ,以迭代列数,但是没有工作 – 我尝试了各种组合,但我期待这样的工作: 从谷歌搜索,我已经阅读了各种模糊的评论,比如’那不是那样做的’,但我还没有找到任何特别引人注目的正确方法的例子。 有人提到在支持bean中构建DataTable,但我能找到的唯一例子是http://forums.sun.com/thread.jspa?threadID=577589 。 它有效,但感觉有点笨拙,特别是因为使用的一些方法已被弃用。 目前,看起来我不太可能使用除核心JSF之外的任何库,但如果绝对必要,这可能会改变。 有人能否以正确的方式解决这个问题? 看起来它应该很简单,所以我确定我只是遗漏了一些明显的东西。

Java foreach迭代顺序是否精确定义了基元?

示例代码: int a[] = new int[]{0, 1, 2, 3}; int result = 0; for (int i : a) result += i; 循环是否保证按顺序迭代a[0] , a[1] , a[2] , a[3] ? 我坚信答案是肯定的,但这个页面似乎并没有明确说明秩序。 有一个坚实的参考?

每个循环如何防止空列表?

我在http://www.leepoint.net/notes-java/flow/loops/foreach.html上阅读。 每个相当于 for (int i = 0; i < arr.length; i++) { type var = arr[i]; body-of-loop } 是 for (type var : arr) { body-of-loop } 我的问题是每个循环如何为空列表工作。 我知道对于常规for循环,arr.length将仅计算为0并且循环不会执行。 每个循环怎么样?