Java 如何比较arraylist中的int[]元素?

Java 如何比较arraylist中的int[]元素?,java,arrays,arraylist,compare,Java,Arrays,Arraylist,Compare,我创建了一个类,公司 public company(String a, int[] b) arraylistc1; 内部温度; 对于(c公司:c1){ 如果(temp>c.getb()){ temp=c.getb(); } 有一个公司列表,一个公司有许多整数作为int[]存储在其中 我试图比较并从int[]b中获取最大值 但是我的代码显示了一个错误,因为c.getb()是int[]数组,所以不能用 因此,我不知道如何比较数组列表中的int[]值您可以使用本机java方法获得带有原语的数组的最

我创建了一个类,
公司

public company(String a, int[] b)
arraylistc1;
内部温度;
对于(c公司:c1){
如果(temp>c.getb()){
temp=c.getb();
}
有一个公司列表,一个公司有许多整数作为
int[]
存储在其中

我试图比较并从
int[]b
中获取最大值

但是我的代码显示了一个错误,因为
c.getb()
int[]
数组,所以不能用


因此,我不知道如何比较
数组列表中的
int[]

您可以使用本机java方法获得带有原语的数组的最大值:

Collections.max(Arrays.asList(array));

为了保存性能,我们将保存该列表。此外,由于您没有初始化temp,因此无法将temp与其他内容进行比较

如果你想得到更大的数字,你需要做的是
temp
而不是
temp>max
,因此每次迭代你都要检查company元素的b数组是否比它的前一个数组有更多的数字

ArrayList<company> c1;
int temp;
for(company c:c1) {
    if (temp > c.getb()) {
        temp = c.getb();
    }
列表c1=。。。。
int temp=整数最小值;
对于(c公司:c1){
int max=Collections.max(Arrays.asList(c.getb());
如果(温度<最大值){
温度=最大值;
}
}
试试这个

List<company> c1 = ....
int temp = Integer.MIN_VALUE;
for(company c:c1) {
    int max = Collections.max(Arrays.asList(c.getb()));
    if (temp < max) {
        temp = max;
    }
}
ArrayList c1=新的ArrayList();
// ....
int temp=c1.stream()
.flatMapToInt(c->Arrays.stream(c.getB()))
.max().getAsInt();
当列表为空时,没有最大值,因此会抛出
NoTouchElementException

ArrayList<company> c1 = new ArrayList<>();
// ....
int temp = c1.stream()
    .flatMapToInt(c -> Arrays.stream(c.getB()))
    .max().getAsInt();
公司级

我试图比较并从int[]b获得最大值

您的代码有几个问题:

ArrayList c1=。。。
内部温度;
对于(c公司:c1){
如果(temp>c.getb()){
temp=c.getb();
}
}
首先,您需要将
temp
初始化为一个值,即哪个值?
Integer.MIN\u value;
,因为您正试图获取最大的值。此外,这:

(c公司:c1)的
{
如果(temp>c.getb()){
temp=c.getb();
}
}
不是得到最大值,而是得到最小值。因此,您实际要做的是:

列表c1=。。。。
int max=整数的最小值;
对于(c公司:c1){
int temp=Arrays.stream(c.getb()).max().getAsInt();
最大值=数学最大值(温度,最大值);
}
如果您不想使用
Arrays.stream
,您可以自己创建函数:

公共静态int-maxArray(int[]数组){
int max=整数的最小值;
for(int e:array){
max=Math.max(e,max);
}
返回最大值;
}
正如你所看到的,这与你一开始想要做的非常相似

使用Java streams,您可以按如下方式执行:

package mpackage;

import java.util.Arrays;

public class Company {
    String a;
    int[] b;
    
    
    public Company() {
    }


    public Company(String a, int[] b) {
        this.a = a;
        this.b = b;
    }


    public String getA() {
        return a;
    }


    public void setA(String a) {
        this.a = a;
    }


    public int[] getB() {
        return b;
    }


    public void setB(int[] b) {
        this.b = b;
    }


    @Override
    public String toString() {
        return "Company [a=" + a + ", b=" + Arrays.toString(b) + "]";
    }

    
}
ArrayList c1=。。。
int max=c1.stream()
.map(c->Arrays.stream(c.getb()).max().getAsInt())
.max(比较器.naturalOrder())
.orElse(整数最小值);

建议在流为empty@Lino唯一的问题是零实际上可能是一个有效的max@dreamcrash同意,这实际上取决于输入数据,因此
Integer.MIN\u值
可能更合适
package mpackage;

import java.util.Arrays;

public class Company {
    String a;
    int[] b;
    
    
    public Company() {
    }


    public Company(String a, int[] b) {
        this.a = a;
        this.b = b;
    }


    public String getA() {
        return a;
    }


    public void setA(String a) {
        this.a = a;
    }


    public int[] getB() {
        return b;
    }


    public void setB(int[] b) {
        this.b = b;
    }


    @Override
    public String toString() {
        return "Company [a=" + a + ", b=" + Arrays.toString(b) + "]";
    }

    
}
ArrayList<company> c1 = ...
int max = c1.stream()
            .map(c -> Arrays.stream(c.getb()).max().getAsInt())
            .max(Comparator.naturalOrder())
            .orElse(Integer.MIN_VALUE);