使用数组中的对象

时间:2016-01-16 12:05:25

标签: java

我有一个包含数百行的文本文件。它看起来像这样: unitName unitPackage unitPrice 。我得对它进行排序并总结。例如,我们得到了这四行:

foo1 01abc 30.00

foo2 02abc 31.50

foo1 04abc 35.00

foo1 01abc 30.00

在我的工作之后我必须得到这样的结果:

foo1 2 (01abc) 60.00

foo2 1 (02abc) 31.50

foo1 1 (04abc) 35.00

我的想法是创建产品类( String unitName,String unitPackage,double unitPrice )并将它放到类似的arraylist中:

List<Product> products = new ArrayList<>();

    while (inputFile.hasNextLine()) {
        Product product = new Product(inputFile.next(), inputFile.next(), inputFile.nextDouble());
        products.add(product);
    }

直到那一刻一切正常,但我不明白,如何整理东西。像这样做这样做的总体好概念是什么?请咨询一下。

3 个答案:

答案 0 :(得分:0)

如果您需要对列表进行排序,可以使用课程sort中的方法Collections

public static <T> void sort(List<T> list,
        Comparator<? super T> c)

要使用它,您需要创建一个Comparator来定义如何对项目进行排序。

List<Product> products = ...
...
Collections.sort(products, new Comparator<Product>() {
    compare(Product o1, Product o2) {  
         // Here define how to compare two products
    }
});
// Here products is sorted as you defined before

答案 1 :(得分:0)

有很多方法可以对数组列表进行排序。在您的特定情况下,您将每个项目放入列表中,也许最简单的形式是使用Map实现,即HashMap,而不是ArrayList。

在插入循环之后,您可以通过map的values()方法获取排序列表。

答案 2 :(得分:0)

您可以通过实施Comparable<T>来使您的产品具有可比性(请参阅docs)。 完成此操作后,您必须实施compareTo(Product o),根据您阅读的属性对产品进行比较。请阅读文档了解更多详情。

然后您可以对数据结构进行排序,例如通过使用Arrays.sort(Object[] objs)(转换为数组并再次进入列表应该不是问题)。

但无论如何,如果你不经常需要这种逻辑,我更喜欢使用比较器的Davide Lorenzo MARINO。如果您经常想要比较产品,请使用实施Comparable<T>的方式。