英文:
How to write a for loop that skips elements if they are equal to the next index in an array list?
问题
我有一个包含用户收集的喜欢事物列表的数组列表。例如,氛围、开放区域、宽敞等。
现在我从我的 Firestore 数据库中获取这些值,并将它们保存在 arrayList<String>
中。如果有多个用户表示喜欢某个氛围,我想在我的应用程序评论页面中显示他们喜欢的不同事物,而不是一遍又一遍地显示相同的事物。
如何编写一个循环,以跳过相等的元素,并使用彼此不相等的值初始化我的 TextView?
我已经使第一个 TextView 和第二个 TextView 成为唯一值,但是如何使第三个 TextView 也从我的 ArrayList 中获得唯一值?
这是我目前的做法:
private ArrayList<String> allLikes;
for (int i = 0; i < allLikes.size() - 1; i++) {
if (!allLikes.get(i).equals(allLikes.get(i + 1))) {
liked1.setText(allLikes.get(i));
liked2.setText(allLikes.get(i + 1));
// liked3.setText(allLikes.get(i + 2)); // 这一行导致错误。
Toast.makeText(DetailsActivity.this, "不相等", Toast.LENGTH_SHORT).show();
} else {
liked1.setText(allLikes.get(0));
Toast.makeText(DetailsActivity.this, "相等", Toast.LENGTH_SHORT).show();
}
}
英文:
I have an array list containing a list of liked things collected from users. for example, atmosphere, open area, spacious, etc.
now I am getting these values from my firestore DB and saving them in the arrayList<String>
. if more than one user said they liked the atmosphere I want to display different things they liked in my app's reviews page and not the same things over and over.
how to write a for loop that will skip elements if they are equal and initialize my TextView with values that are not equal to each other?
I made things work for the first TextView and the second textView to be unique but how will I make the third textView also a unique value from my ArrayList?
heres what i've done so far:
private ArrayList<String> allLikes;
for(int i = 0; i<allLikes.size()-1; i++){
if(allLikes.get(i) != allLikes.get(i+1)){
liked1.setText(allLikes.get(i));
liked2.setText(allLikes.get(i+1));
// liked3.setText(allLikes.get(i+2)); //this line is causing an error.
Toast.makeText(DetailsActivity.this, "NOT EQUAL", Toast.LENGTH_SHORT).show();
}else{
liked1.setText(allLikes.get(0));
Toast.makeText(DetailsActivity.this, "EQUAL", Toast.LENGTH_SHORT).show();
}
}
答案1
得分: 2
private ArrayList<String> allLikes = null;
// 填充你的列表
Set<String> set = new HashSet<>(allLikes);
int i = 0;
for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
String s = it.next();
i++;
if (i == 1)
textView1.setText(s);
else if (i == 2)
textView2.setText(s);
else if (i == 3)
textView3.setText(s);
else
break;
}
英文:
You may use this pattern:
private ArrayList<String> allLikes = null;
//fill your list
Set<String> set = new HashSet<>(allLikes);
int i=0;
for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
String s= it.next();
i++;
if (i==1)
textView1.setText(s);
else if (i==2)
textView2.setText(s);
else if (i==3)
textView3.setText(s);
else
break;
}
When you convert a List
to a Set
, all the similar entries are removed.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论