gpt4 book ai didi

java - forEach() 不应该尊重顺序,但在这里它似乎尊重,为什么?

转载 作者:行者123 更新时间:2023-11-30 08:11:34 28 4
gpt4 key购买 nike

我一直在尝试自己做一些基本的 GA 实现。我用了一个类 Gene它包装了一个二进制位,一个 Chromosome具有 ArrayList 的类名为 genesGene对象。在Chromosome类我有评价方法value()它只是计算染色体中位的十进制等价物。重写的 toString() Chromosome 中的方法类使用 lambda 表达式创建 Gene 中位的字符串表示形式ArrayList 中包含的对象 genes .我的问题是:因为 forEach()方法不应该遵守顺序(为了并行的好处),为什么它总是返回底层位的正确字符串表示,即按照它们的创建顺序?还是我在这里遗漏了一些严重的事情?会不会是染色体长度很短的缘故,这里对排序的“不尊重”并不突出?

这是我的类(class)。

Gene

public class Gene {

private short value;

public Gene() {
value = (short) (Math.random() <= 0.5 ? 0 : 1);
System.out.print(value);
}

@Override
public String toString() {
return String.valueOf(value);
}
}

Chromosome

import java.util.ArrayList;
import java.util.Arrays;

public class Chromosome {

private ArrayList<Gene> genes;

public Chromosome(int numOfGene) {
this.genes = new ArrayList<>();
for (int i = 0; i < numOfGene; i++) {
this.genes.add(i, new Gene());
}
}

public int value() {
return Integer.parseInt(this.toString(), 2);
}

@Override
public String toString() {
StringBuilder chromosome = new StringBuilder("");

genes.stream().forEach((g) -> chromosome.append(g));

return chromosome.toString();
}

public static void main(String[] args) {
Chromosome c = new Chromosome(10);
System.out.println("");
System.out.println(c);
}
}

Gene中的打印语句constructor 是为了查看基因创建的顺序。无论我运行该程序多少次,forEach()总是给出正确的位表示,这让我感到困惑。还是我完全不知道这应该如何工作,我不知道:-(

最佳答案

由于您使用的是顺序流,因此输入列表的顺序将被保留。如果你把它改成

genes.parallelStream().forEach((g) -> chromosome.append(g));

您可能会得到不同的订单。

关于java - forEach() 不应该尊重顺序,但在这里它似乎尊重,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30931240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com