简体   繁体   中英

How can I use List<object> with Integer and Float ?in java

In fact, I want to use "normOfVector()" method with Integer, and Float, but I couldn't

I get this error:

The method normOfVector(ArrayList) in the type TestMethod is not applicable for the arguments (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

My point is:

I want to create a method that accept the two cases.

Thank you.

In your first block your are computing numbers but storing them as objects. You should be storing them as Integer or Float , or maybe Double or Number , but not Object . Second in your cos(...) method you should limit what kind of parameters are accepted by changing the declaration to List<Integer> , List<Float> or List<? extends Number> List<? extends Number> . It may help to study up on java generics and especially using the PECS principle .

Based on your updated code.

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

This is how I would write it using 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?
    }
}

也许您也可以使用以下方式:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM