我试图把一个值在一个数组列表到我的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