我正在嘗試創建一個方法,該方法將接受一個字串(名稱)并遍歷此陣列并僅保留該特定行。我無法更改此資訊的存盤方式,因為很多代碼都是基于這種安排的。
我想放入“mike”,它洗掉陣列的所有其他部分,然后把那一行還給我。
private static final String[][] MsgKeys =
{
{"mike", "75", "up"},
{"john", "15", "up"},
{"eric", null, "left"},
{"mark", null, "right"},
{"chris", "87", "up"},
{"shawn", null, "left"},
{"blake", "67", "left"},
{"bentley", null, "right"}
}
uj5u.com熱心網友回復:
我不認為洗掉任何東西是一個好主意。具體來說,陣列具有固定大小,因此您需要將其更改為串列,或者創建一個全新的陣列。
既然你沒有定義多行同名的行為,那么只回傳第一個匹配的行,如果沒有找到,回傳 null 怎么樣?
private String[] getRow(String name, String[][] data) {
for (String[] row : data) {
if (data[0].equals(name)) return row;
}
return null;
}
uj5u.com熱心網友回復:
您不能完全從陣列中洗掉元素,因為它具有固定長度。您可以做的是回傳第二個一維陣列。
private String[] getLineByName(String name){
String[] ret;
for(int i = 0; i < MsgKeys.length; i ){
if(MsgKeys[i][0].equals(name)){
ret = MsgKeys[i];
return ret;
}
}
return null;
}
uj5u.com熱心網友回復:
正如其他答案中所述,您不應從 中洗掉元素array,但您可以使用stream以下方法找到該行:
public static String[] findRow(String name, String[]... array) {
return Arrays.stream(array)
.filter(row -> Objects.equals(row[0], name))
.findAny().orElse(null);
}
然后你可以這樣做:
String[] row = findRow("mike", MsgKeys);
System.out.println(Arrays.toString(row));
輸出:
[mike, 75, up]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333198.html
