在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
不同。
答案 0 :(得分:6)
Arrays.asList
以T...
为参数。当参数是一个对象数组时,它就像你写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"