获取arrayList值到ArrayAdapter为一个listView在android studio



我试图把一个值在一个数组列表到我的listView,下面是详细信息。

下面是数组列表info的示例:

private static final ArrayList<User> users = new ArrayList<User>(){{
add(new User("Nevin Hobden",38,"Male","Friend","New Mexico","NM"));
add(new User("Stillman Macken",32,"Male","Friend","Arizona","AZ"));
add(new User("Stevy Ranscomb",36,"Male","Friend","Arizona","AZ"));
add(new User("Lynelle Garstang",22,"Female","Family","California","NE"));

我想从用户数组列表中抓取状态数据,例如。我只希望得到"新墨西哥州"、"亚利桑那州"、"亚利桑那州"one_answers"加利福尼亚州"。显示在我的listView

如果可能的话,我还想删除重复项并按升序排序

Arizona
California
New Mexico
下面是我的代码
ListView stateListView;
ArrayList<DataServices.User> stateList = DataServices.getAllUsers();
ArrayAdapter<DataServices> arrayListAdapter;
stateListView = view.findViewById(R.id.stateListView);
arrayListAdapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,android.R.id.text1, stateList);
stateListView.setAdapter(arrayListAdapter);

我知道我不应该在arrayAdapter中使用stateList,但是我不知道我应该如何改变这部分,任何帮助都很感激。谢谢!

如果您想获得状态列表,只需在原始列表上循环并将状态放入ArrayList<String>中,就像这样

ArrayList<String> states = new ArrayList<>();
for(DataServices.User user : users) {
states.add(user.state);
}

如果你只想要唯一的状态,你可以用HashSet代替。集合消除重复项。

HashSet<String> states = new HashSet<>();
for(User user : users) {
states.add(user.state);
}
// then convert it back to a list
ArrayList<String> unique_states = new ArrayList<>(states);

如果你想排序,你可以使用Collections.sort来排序列表

Collections.sort(unique_states);

如果你的Java版本支持它,你也可以用更少的行来完成它,但它完成的是同样的事情

List<String> statesList = users.stream()
.map(u -> u.state)
.collect(Collectors.toList());
Set<String> statesSet = users.stream()
.map(u -> u.state)
.collect(Collectors.toSet());
// Or in one-line
List<String> unique_states = users.stream()
.map(u -> u.state)
.collect(Collectors.toSet())
.stream()
.sorted()
.collect(Collectors.toList());

请不要使用ListView。ListView是过时的,不像RecyclerView那么高效。这里有一个很好的文档如何使用RecyclerView

相关内容

  • 没有找到相关文章

最新更新