我有一个名为Java
Friend
类
public class Friend {
public String friendsUserName;
public boolean isFavorite;
public boolean isFriend;
}
我从包含此类Json
的{{1}}的服务器获取JsonArray
个文件。我使用Friend
类来解析并将Gson
映射到Json
。我必须按照以下方式对数组进行排序
ArrayList<Friend>
Friend
和isFavorite
isFriend
包含仅ArrayList
Friend
isFriend
包含ArrayList
,其中Friend
为isFriend
。因此,我可以使用此ComparatorChain
中描述的方法或者我可以使用以下方法对False
ArrayList<Friend>
public ArrayList<Friend> friendsList;
public void sortArrayList() {
ArrayList<Friend> favoriteList = new ArrayList<Friend>();
ArrayList<Friend> friendOnlyList = new ArrayList<Friend>();
ArrayList<Friend> nonFriendList = new ArrayList<Friend>();
for (int length = friendsList.size(), i = length - 1; i >= 0; i--) {
Friend friend = friendsList.get(i);
if (friend.isFriend) {
if (friend.isFavorite) {
favoriteList.add(friend);
} else {
friendOnlyList.add(friend);
}
} else {
nonFriendList.add(friend);
}
friendsList.remove(i);
}
addAllAndClear(favoriteList);
favoriteList = null;
addAllAndClear(friendOnlyList);
friendOnlyList = null;
addAllAndClear(nonFriendList);
nonFriendList = null;
}
public void addAllAndClear(ArrayList<Friend> updatedList) {
Collections.sort(updatedList, nameComparator);
friendsList.addAll(updatedList);
updatedList.clear();
updatedList = null;
}
Comparator<Friend> nameComparator = new Comparator<FriendListResponse.Friend>() {
@Override
public int compare(Friend lhs, Friend rhs) {
return lhs.friendsUserName.compareTo(rhs.friendsUserName);
};
};
明智的我应该遵循Efficiency
或我自己的方法。我正在为ComparatorChain
平台开发此内容,因此Android
和Memory Management
是最重要的。
附:我不擅长使用工具来比较Efficiency
。
答案 0 :(得分:2)
在班级朋友中实施可比较界面,然后使用 Collections.sort()
或者@vipul mittal建议
比较者可能看起来像
Comparator<Friend> favoriteComparator = new Comparator<FriendListResponse.Friend>() {
@Override
public int compare(Friend lhs, Friend rhs) {
int i=0,j=0;
if(lhs.isFavorite() && lhs.isFriend())
i++;
if(lhs.isFriend())
i++;
if(rhs.isFavorite() && rhs.isFriend())
j++;
if(rhs.isFriend())
j++;
if (i==j) {
return lhs.friendsUserName.compareTo(rhs.friendsUserName);
}
else {
return i-j;
}
};
};
答案 1 :(得分:2)
尝试使用以下比较器:
Comparator<Friend> favoriteComparator = new Comparator<FriendListResponse.Friend>() {
@Override
public int compare(Friend lhs, Friend rhs) {
int i=0,j=0;
if(lhs.isFavorite()&&lhs.isFriend())
i++;
if(lhs.isFriend())
i++;
if(rhs.isFavorite()&&rhs.isFriend())
j++;
if(rhs.isFriend())
j++;
return i-j;
};
};
排序时:
Collections.sort(friendsList,favoriteComparator);