如何在读取文件时对ArrayList进行排序

7 浏览
0 Comments

如何在读取文件时对ArrayList进行排序

我有一个名为Fruit的类。我正在创建一个该类的列表,并向列表中添加每个水果。我想根据水果名称的顺序对该列表进行排序。

public class Fruit{
    private String fruitName;
    private String fruitDesc;
    private int quantity;
    public String getFruitName() {
        return fruitName;
    }
    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }
    public String getFruitDesc() {
        return fruitDesc;
    }
    public void setFruitDesc(String fruitDesc) {
        this.fruitDesc = fruitDesc;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

我使用for循环创建该类的列表:

List fruits = new ArrayList();
Fruit fruit;
for (int i = 0; i < 100; i++) {
   fruit = new Fruit();
   fruit.setFruitName(...);
   fruits.add(fruit);
}

我需要根据列表中每个对象的水果名称对这个ArrayList进行排序。如何实现?

0
0 Comments

问题出现的原因是想要在读取文件时对ArrayList进行排序。解决方法是使用Comparator来实现排序。Comparator是一个接口,可以用来定义自定义的排序规则。在这个例子中,通过比较Fruit对象的fruitName属性来排序,从而对fruits列表进行排序。

使用Comparator的代码如下:

List fruits = new ArrayList();
Fruit fruit;
for(int i = 0; i < 100; i++) {
  fruit = new Fruit();
  fruit.setname(...);
  fruits.add(fruit);
}
// 排序
Collections.sort(fruits, new Comparator() {
  public int compare(Fruit fruit2, Fruit fruit1) {
    return fruit1.fruitName.compareTo(fruit2.fruitName);
  }
});

这样,fruits列表就按照fruitName属性进行排序了。

另一个解决方法是让对象实现Comparable接口。通过实现Comparable接口,可以定义对象之间的默认排序规则。不同于Comparator,使用Comparable时,对象的排序规则被认为是对象本质的一部分。在这个问题中,可以让Fruit类实现Comparable接口,并在compareTo方法中定义排序规则。

对于排序的顺序,根据讨论中的回答,这里是升序排序。如果想要降序排序,可以在排序后反转列表。需要注意的是,如果水果名称区分大小写,应该使用compareToIgnoreCase而不是compareTo。

某些情况下了在Java 8之后的解决方法,可以参考链接:[stackoverflow.com/a/2784576/1372202](http://stackoverflow.com/a/2784576/1372202)

还某些情况下了使用Comparator的文档链接,可以参考:[docs.oracle.com/javase/7/docs/api/java/util/Comparator.html](https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)。文档中说明了Comparator接口的用法和返回值的含义。

最后,有人提出了一个问题,即升序或降序取决于compare方法中对象的位置。比较fruit1和fruit2,结果将不同于比较fruit2和fruit1。

0
0 Comments

问题的原因是在读取一个文件并将其内容存储在ArrayList中时,希望能够对ArrayList进行排序。解决方法是使用Apache Commons库中的BeanComparator来实现基于类的属性的排序。

首先,需要导入org.apache.commons.beanutils.BeanComparator类。然后,创建一个BeanComparator对象,将希望排序的属性作为参数传递给它。在这个例子中,我们将使用属性"fruitName"来对ArrayList进行排序。

接下来,使用Collections.sort()方法对ArrayList进行排序。将ArrayList和创建的BeanComparator对象作为参数传递给sort()方法。这样,ArrayList中的元素将根据指定的属性进行排序。

以下是实现排序的代码示例:

import org.apache.commons.beanutils.BeanComparator;
BeanComparator fieldComparator = new BeanComparator("fruitName");
Collections.sort(fruits, fieldComparator);

通过使用BeanComparator和Collections.sort()方法,我们可以在读取文件并将内容存储在ArrayList中的同时对ArrayList进行排序。这样,我们可以方便地按照特定属性对ArrayList中的元素进行排序。

0
0 Comments

如何在读取文件时对ArrayList进行排序

问题的原因:

在读取文件时,我们可能需要对ArrayList进行排序以便更好地处理数据。然而,ArrayList默认情况下是按照元素的插入顺序进行排序的,并不能满足我们的需求。

解决方法:

为Fruit类实现Comparable接口。

public class Fruit implements Comparable {
    public int compareTo(Fruit fruit) {
        // 在这里编写按照名称比较的代码
    }
}

然后通过调用sort方法来对ArrayList进行排序。

Collections.sort(fruitList);

Collections.sort(..)方法也可以用于ArrayList,其中T可以是Integer、Long或String等类型,这些类型都已经实现了它们自己的compareTo(..)方法。

如果我们想要添加多个不同的排序选项,例如覆盖compareTo方法以按照对象名称进行排序,并且添加另一个按照年龄、产品ID等排序的选项,我们可以采用以下方法。

我们可以编写多个Comparators,并在适当的位置插入正确的Comparator。例如,按照对象名称进行排序的Comparator可以这样写:

Comparator comp1 = new Comparator() {
    @Override
    public int compare(Fruit fruit2, Fruit fruit1) {
        return  fruit1.fruitName.compareTo(fruit2.fruitName);
    }
});
Collections.sort(fruitList, comp1);

通过编写不同的Comparator,我们可以在需要时选择不同的排序选项,并对ArrayList进行排序,以满足我们的需求。

0