具有Java流的数组的Arraylist

具有Java流的数组的Arraylist,java,python,arrays,arraylist,java-stream,Java,Python,Arrays,Arraylist,Java Stream,我得到了一个返回带有数组的ArrayList的方法,如下所示: {1,2,3}, {4,5,6}, {7,8,9}.... public int[] simulatePlays(BitBoard board, int number){ int[] count = {0,0,0}; while (number > 0){ BitBoard b = new BitBoard(board); count[playRandomly(b)+1] +

我得到了一个返回带有数组的ArrayList的方法,如下所示:

{1,2,3}, {4,5,6}, {7,8,9}....

public int[] simulatePlays(BitBoard board, int number){
    int[] count = {0,0,0};

    while (number > 0){
        BitBoard b = new BitBoard(board);
        count[playRandomly(b)+1] += 1;
        number--;
    }
    return count;
}

public ArrayList<int[]> evaluateMoves(BitBoard board, int number){
    ArrayList<Integer> moves = board.listMoves();
    ArrayList<int[]> values = new ArrayList<>();

    for(int move : moves){
        board.makeMove(move);
        values.add(simulatePlays(board, number));
        board.undoMove();
    }
    return values;
}

有人能帮我吗?

当你想使用流时,你可以这样做

ArrayList<Integer> values = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3}));
    int valueindex = values.indexOf(values.get(2));//to get the index
   // Integer v = values.get(2);
    Integer s = values.stream().reduce((a,b)-> b*2).get();//multiply lastvalue by 2
    System.out.println(s);
    System.out.println(valueindex);

由于java流的性质,无法从源代码检索元素索引。例如,您可以使用
parallelStream()
而不是
stream
,并且由于源代码将被拆分,所以它仍然可以正常工作

要仅获取具有某个值的第三个元素的最大倍数的信息,可以使用如下逻辑:

List<int[]> moves = new ArrayList<>();
moves.add(new int[]{1, 2, 3});
moves.add(new int[]{4, 5, 6});
moves.add(new int[]{7, 8, 9});

int someValue = 1;
Integer maxValue = moves.stream().map(array -> array[2] * someValue).reduce(0, Integer::max);
System.out.println(maxValue);
List moves=new ArrayList();
添加(新的int[{1,2,3});
moves.add(新的int[{4,5,6});
moves.add(新的int[]{7,8,9});
int-someValue=1;
整数maxValue=moves.stream().map(数组->数组[2]*someValue).reduce(0,整数::max);
系统输出打印项次(最大值);
更新如果您还想拥有索引,则更适合使用2个循环

int maxValue = Integer.MIN_VALUE;
int indexMaxValueArray = 0;

for (int i = 0; i < moves.size(); i++) {
    if (someValue * moves.get(i)[2] > maxValue) {
        maxValue = someValue * moves.get(i)[2];
        indexMaxValueArray = i;
    }
}
System.out.println("maxValue = " + maxValue);
System.out.println("index of array in list = " + indexMaxValueArray);
int maxValue=Integer.MIN\u值;
int indexMaxValueArray=0;
对于(int i=0;imaxValue){
maxValue=someValue*moves.get(i)[2];
indexMaxValueArray=i;
}
}
System.out.println(“maxValue=“+maxValue”);
System.out.println(“列表中数组的索引=“+indexMaxValueArray”);

array[3]
将无法编译,我认为您应该提供一个代码来处理。请注意,值得一提的是,流和与索引相关的任何内容都无法相处。很好,这很有效,现在我得到了正确的值,但如何才能找到该值的索引?返回值。indexOf(maxValue);找不到正确的对象,因为它嵌套在数组中,或者?假设
someValue
大于零,当您只想将最大值与
someValue
相乘时,将每个值与它相乘是毫无意义的。只需先搜索最大值,然后再相乘,例如
moves.stream().mapToInt(array->array[2]).max().get()*someValue
…@Holger我知道。让它更容易理解
List<int[]> moves = new ArrayList<>();
moves.add(new int[]{1, 2, 3});
moves.add(new int[]{4, 5, 6});
moves.add(new int[]{7, 8, 9});

int someValue = 1;
Integer maxValue = moves.stream().map(array -> array[2] * someValue).reduce(0, Integer::max);
System.out.println(maxValue);
int maxValue = Integer.MIN_VALUE;
int indexMaxValueArray = 0;

for (int i = 0; i < moves.size(); i++) {
    if (someValue * moves.get(i)[2] > maxValue) {
        maxValue = someValue * moves.get(i)[2];
        indexMaxValueArray = i;
    }
}
System.out.println("maxValue = " + maxValue);
System.out.println("index of array in list = " + indexMaxValueArray);