从原始ArrayList获取值

时间:2015-05-18 13:14:31

标签: java arraylist

我有一个未指定为double / float的ArrayList,但它包含22.3312.563421的双浮点值。

当我从一个文件中读取以保存数据时,我实际上有两个。 他们看起来像这样

static List<MySample> data = new ArrayList<MySample>();
static ArrayList list = new ArrayList();

使用ArrayList<Double> list = new ArrayList();我可以使用简单的 循环如:

double sum = 0;
double count = 0;
for (Double a : list) {
    sum += a; 
    count++;
}
System.out.println("Average is   " + sum / count);

但是当我使用时:

for (Object o : list) {
    // How can I do the same with some code here?
}

如何对Object循环执行相同的操作? 我希望你明白我的问题。

好的,这是我的方法,我在其中反序列化文件以及我想从哪里获取值...

public void deserialize(List<MySample>listan, String path) {
   double sum=0;
   int count=0;
try {File file = new File(path);ObjectInputStream in = new 
   ObjectInputStream(newFileInputStream(file));             
   listan = (ArrayList<MySample>) in.readObject();


        for(Object obj: listan){

            //here I need the code
}
         System.out.println("Good work!");
        in.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } catch (ClassNotFoundException ex) {
        System.out.println(ex.getMessage());
    }

}

6 个答案:

答案 0 :(得分:2)

如果您确保list包含所有双精度值,请将其强制转换为Double(为了不打破整个循环,必须将try/catch放入循环中...性能不高):

for (Object o : list) {
    try {
        sum += ((Double)o).doubleValue();
        count++;
    } catch(ClassCastException e) {
    }
}

但建议不要使用ArrayList list = new ArrayList();等原始类型列表,更好的方法是List<Double> list = new ArrayList<Double>();

答案 1 :(得分:1)

以下内容适合您:

        Double sum = (double) 0;
        int count =0;
        for (Object o: list){
            sum= sum+ (Double)o;
            count++;
        }
        System.out.println("Average is   " + sum / count);

您应该使用提供编译时类型安全性的Generics

        ArrayList<Double> list = new ArrayList<Double>();
        list.add(22.33);
        list.add(12.56);
        list.add(34.21);

        Double sum = (double) 0;
        int count =0;
        for (Double o: list){
            sum= sum+ o;
            count++;
        }
        System.out.println("Average is   " + sum / count);

答案 2 :(得分:0)

你可以施放:

for (Object o:list){
    sum += (double) o;
    count++;
}

答案 3 :(得分:0)

您可以将对象强制转换为Double,至少如果您确定对象属于Double类型。从Java 5开始,它基本上就是旧的做事方式。

for (Object o:list){
     total += ((Double)o).doubleValue();
}

答案 4 :(得分:0)

至少应该使用:static List<Number> list,因为DoubleFloat延伸Number

然后为了你的总和,你可以得到双倍的价值。这是对泛型的正确使用。

import java.util.ArrayList;
import java.util.List;

public class NumberList {
    public static void main(String[] args) {
        List<Number> list = new ArrayList<Number>();

        list.add(1.4142135623730950);
        list.add(2.71828f);
        list.add(3.14159265359d);

        // Average is: 2.4246954309812287
        System.out.println("Average is: " + avg(list));
    }

    public static double avg(List<Number> list) {
        double sum = 0;
        double count = 0;

        for (Number a : list) {
            sum += a.doubleValue();
            count++;
        }

        return sum / count;
    }
}

答案 5 :(得分:0)

我尝试了以上所有但是没有用,但我想出来了。

我的方法看起来像这样

<?php
 foreach ($dateinfo2 as $key => $time)
{
  $uInfo = $_SESSION['data']->table('units')->byName($key)->data();//item get data by name

  if(isset($_POST['cow'])){
    if ($uInfo["keyword"] != 'cow') continue;
}
  if(isset($_POST['chicken'])){
    if ($uInfo["keyword"] != 'chicken') continue;
}
if (isset($uInfo['type']) && !empty($uInfo['type'])) {
    echo '<center><font color="olive">TypE: '.$uInfo['type'].'</font><br>';
}else{
 }
}

令我印象深刻的是,Java有许多类型的代码可以做同样的事情。 为什么没有一个通用的代码行呢? 有一些示例差异代码可以执行相同的操作,但无法使用 我的方法......例子

public void deserialize(List <MySample>listan, String path) {
   double sum=0;
   int count=0;
   double average=0;
    try {
        File file = new File(path);
        ObjectInputStream in = new ObjectInputStream(new   
        FileInputStream(file));
        listan = (ArrayList<MySample>) in.readObject();

        for (Object o:listan){

            sum += Double.parseDouble((String) o);
            count ++;
            average = sum/count;

}

         System.out.printf("The average on %s är %.2f ", item, average);

        in.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } catch (ClassNotFoundException ex) {
        System.out.println(ex.getMessage());
    }

}

Theese没有用,但这段代码为我做了工作

sum += a.doubleValue();
sum += (double) o;
sum += ((Double)o).doubleValue();