java`indexOf`用于`float []`

时间:2018-04-25 16:46:10

标签: java indexof

在Java中,使用java.util.Arrays,代码如下:

float[] arr = {(float)0.2, (float)4.5};
Float[] brr = {new Float(0.2), new Float(4.5)};
Float x = new Float(4.5);
float y = (float)4.5;
System.out.println(Arrays.asList(arr).indexOf(x));
System.out.println(Arrays.asList(arr).indexOf(y));
System.out.println(Arrays.asList(brr).indexOf(x));
System.out.println(Arrays.asList(brr).indexOf(y));

给出

-1
-1
1
1

我的问题:如何在数组arr中搜索4.5的索引?

我认为Arrays.asList(arr)列出了来自arr的对象列表,但它的行为与其他数组brr不同。

3 个答案:

答案 0 :(得分:6)

Arrays.asListT...为参数。当参数是一个对象数组时,它就像你写Arrays.asList(new Float(0.2), new Float(4.5))一样传递。

在第二种情况下,参数是一个基元数组。这里,Java编译器决定将整个数组视为单个对象。因此,您将传递一个包含单个元素的数组,即浮点数组。

要确认这一点,请尝试以下操作:

Arrays.asList(arr).indexOf(arr) // returns 0

由于该方法的类型为<T> List<T> asList(T...ts),因此只允许使用第二个语句:

    System.out.println(Arrays.<Float>asList(arr).indexOf(x)); //Error
    System.out.println(Arrays.<Float>asList(brr).indexOf(x)); //List<Float>

第一个原始类型不能在参数中键入Float。

将其转换为List的语句如下:

 List<float[]> l = Arrays.<float[]>asList(arr); //The array is the only index in the List

答案 1 :(得分:0)

是的,表现得像这样。问题是你不要将arr创建为Float对象数组。而是你制作原始数组。

试试此代码

const functions = require('firebase-functions');

    const admin = require("firebase-admin");
    admin.initializeApp(functions.config().firebase);


    exports.sendMessage = functions.firestore
        .document('products/{productId}')
        .onCreate(event => {

        const docId = event.params.productId; // <-- error here

        const name = event.data.data().name;
        const productRef = admin.firestore().collection('products').doc(docId)
        return productRef.update({ message: `Nice ${name}! - Love Cloud Functions`})

    });

此代码将为您提供所需的输出

答案 2 :(得分:0)

Arrays.asList(arr),如果arr是基元数组,则创建单个元素的列表,这是数组本身。

I.e。:

    float[] arr = {(float)0.2, (float)4.5};

    System.out.println(Arrays.asList(arr).get(0).getClass().getSimpleName());
      // Prints "float[]"
    System.out.println(Arrays.asList(arr).size());
      // Prints "1"