如何在java </object>中将List <object>与Integer和Float一起使用?

时间:2015-02-25 15:56:17

标签: java list

事实上,我想使用&#34; normOfVector()&#34;使用Integer和Float的方法,但我不能

我收到此错误:

TestMethod类型中的方法normOfVector(ArrayList)不适用于参数(ArrayList)

    package code;

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

public class TestMethod
{

    public static float normOfVector(ArrayList<Integer> list)
    {
        float sum = 0.0f;
        for (Integer i : list)
            sum = sum + (float) (i * i);
        // end for

        return (float) Math.sqrt(sum);
    }// end function


    public static void main(String[] args)
    {

        // In this case no Problem
        ArrayList<Integer> listI = new ArrayList<>();
        listI.add(0);
        listI.add(3);
        listI.add(5);
        listI.add(7);
        listI.add(2);
        float result = normOfVector(listI);

        // In this case will not work
        ArrayList<Float> listF = new ArrayList<>();
        listF.add(0.0f);
        listF.add(3.0f);
        listF.add(5.0f);
        listF.add(7.0f);
        listF.add(2.0f);
        result = normOfVector(listF);

    }// end main

}// end class

我的观点是:

我想创建一个接受这两种情况的方法。

谢谢。

3 个答案:

答案 0 :(得分:2)

在你的第一个区块中,你是计算数字,但将它们存储为对象。您应该将它们存储为IntegerFloat,或DoubleNumber,而不是Object。在您的cos(...)方法中,您应该通过将声明更改为List<Integer>List<Float>List<? extends Number>来限制接受哪种参数。研究java generics并特别是使用PECS principle可能有所帮助。

答案 1 :(得分:0)

根据您更新的代码。

public class TestMethod {

    public static double normOfVector(List<? extends Number> list) {
        double sum = 0.0;
        for (Number d : list)
            sum += d.doubleValue() * d.doubleValue();

        return Math.sqrt(sum);
    }    

    public static void main(String[] args) {
        List<Integer> listI = new ArrayList<>();
        listI.add(0);
        listI.add(3);
        listI.add(5);
        listI.add(7);
        listI.add(2);
        double result = normOfVector(listI);

        List<Float> listF = new ArrayList<>();
        listF.add(0.0f);
        listF.add(3.0f);
        listF.add(5.0f);
        listF.add(7.0f);
        listF.add(2.0f);
        result = normOfVector(listF);
    }
}

这是我用List<Double>

写的方式
Map<String, Double> currentWord = new HashMap<>();
double first = main.getWords().get(firstWord);
for(Map.Entry<String, Double> entry : main.getWords()) {
    String secondWord = entry.getValue();
    double cosValue = vectors.cos(first, entry.getValue());
    if (cosValue >= percentage) {
        currentWord.put(secondWord, Math.round(cosValue * 100) / 100.0);
        break; // is there any point searching for another word?
    }
}

答案 2 :(得分:0)

也许你也可以使用这样的东西:

Number[] numbers = new Number[] { valueOfFloat, valueOfInteger };