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);