gpt4 book ai didi

java - 如何循环Arraylist,其中有项目,并且项目有多个变量

转载 作者:行者123 更新时间:2023-12-02 09:42:58 24 4
gpt4 key购买 nike

我有 arraylist (mNamelist),其中包含项目 (NameItem),这些项目包含 2 个变量(String 和 int)。我还有一个输入字段,用户可以在其中将新名称插入到列表中。

我需要检查列表中的每个项目,如果用户给出的名称不在任何这些项目中,那么它可以添加一个项目。如果找到匹配项,它应该给出 Toast 并立即停止循环。

我尝试过的事情:

private void addItem(int position) {
/** Get user input (name) **/
textAdd = findViewById(R.id.name_input);

/** Check if that name already on a list **/
for (int i = 0; i < mNameList.size(); i++) {

/** Check namelists item, and in that item String variable named getText1 and check if it match to the name that user gave **/
if (mNameList.get(i).getText1() == textAdd.toString().trim()) {
/** If match, give toast and stop looping **/
Toast toast= Toast.makeText(getApplicationContext(),
"This name is already on a list...", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
break;
} else {
/** If no matches, add name to the list **/
mNameList.add(position, new NameItem(textAdd.getText().toString().trim()));
sortArrayList();
saveData();
mAdapter.notifyItemInserted(position);
textAdd.getText().clear();
}
}
}

很快我意识到这里的问题是每次它得不到匹配时,它都会尝试添加该项目。它应该做的是,在检查了所有项目并且没有找到匹配项之后,才应该添加该新名称一次,而不是在每个循环中。此外,如果它找到匹配项,它应该给出该 Toast 并立即停止循环。

最佳答案

如果您的 api 级别足够高,您可以使用 java 8 流 api,或者使用简单的 for-each 循环来检查列表是否已包含具有给定输入名称的条目。您只需遍历列表并检查是否有任何 nameItem 包含与您的输入相同的名称。如果是的话,你可以做 toast 。否则,您可以使用给定的输入创建一个新的 nameItem 并将其添加到您的列表中。

private boolean alreadyContainsNameWithForEach(Collection<NameItem> mNames, String input){
for(NameItem item : mNames){
if(item.getName().equals(input)){
return true;
}
}
return false;
}

private boolean alreadyContainsNameWithStreams(Collection<NameItem> mNames, String input){
return mNames.stream().anyMatch(nameItem -> nameItem.getName().equals(input));
}

关于java - 如何循环Arraylist,其中有项目,并且项目有多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913656/

24 4 0