解析ArrayList的contains方法 - 芒果蜜桃π - CSDN博客
List按照指定字段去重複
Java compareTo() 方法 | 菜鳥教程 http://www.runoob.com/java/number-compareto.html
private void sortFood(){
List<FoodMode> foodModeList = new ArrayList();
foodModeList.add(new FoodMode(1, "蘋果","12.35"));
foodModeList.add(new FoodMode(2, "蘋果","15.35"));
foodModeList.add(new FoodMode(5, "獼猴桃","16.35"));
foodModeList.add(new FoodMode(3, "芭蕉","12.35"));
foodModeList.add(new FoodMode(1, "菠蘿","12.35"));
//********************方法一:使用HashMap*******************
List<FoodMode> list1= new ArrayList<FoodMode>();
HashMap<String, String> hashMap = new HashMap<String, String>();
for (FoodMode foodMode : foodModeList) {
if (foodMode == null) {
continue;
}
String name = foodMode.getName();
if (name != null) {
String value = hashMap.get(name);
if (TextUtils.isEmpty(value)) { //如果value是空的,說明取到的這個name是第一次取到
hashMap.put(name, name);
list1.add(foodMode); //list1就是我們想要的去重之後的結果
} else {
continue;
}
}
}
hashMap.clear();//結束了記得將hashMap請一個,內存能夠得到及時的釋放
//***************方法二:使用Set***************
List<FoodMode> list2 = new ArrayList<FoodMode>();
Set<String> set = new HashSet<String>();
for (FoodMode user : foodModeList) {
if (user == null) {
continue;
}
String name = user.getName();
if (name != null) {
if (!set.contains(name)) { //set中不包含重複的
set.add(name);
list2.add(user);
} else {
continue;
}
}
}
set.clear();
//*******************方法三:使用Comparator****************
List<FoodMode> list3 = removeDuplicateMode(foodModeList);
}
private ArrayList<FoodMode> removeDuplicateMode(List<FoodMode> users) {
Set<FoodMode> set = new TreeSet<FoodMode>(new Comparator<FoodMode>() {
@Override
public int compare(FoodMode o1, FoodMode o2) {
//字符串,則按照asicc碼升序排列
//compareTo() 方法用於將 Number 對象與方法的參數進行比較。可用於比較 Byte, Long, Integer等。
//該方法用於兩個相同數據類型的比較,兩個不同類型的數據不能用此方法來比較。
//相等 0;小於 -1;大於1
return o1.getName().compareTo(o2.getName());
}
});
set.addAll(users);
return new ArrayList<FoodMode>(set);
}
FoodMode 類:
public class FoodMode {
private int id;
private String name;
private String price;
public FoodMode(int id, String name, String price) {
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Food{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
List轉換成String
List<String> list= new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String str= list.toString().replaceAll(" ", "");
String newStr= str.substring(1,ypbhStr.length()-1);
list轉換成字符串樣式是: [ a, b, c]。每個元素前可能會有空格。
str: [ a,b, c]
newStr:a,b,c
List排序
List排序轉載於:java對list進行排序 - 不懂java的小白 - 博客園
主要講述對list進行排序的幾種方式
1、先來個簡單的,上代碼
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(new Integer(13));
list.add(new Integer(4));
list.add(new Integer(9));
Collections.sort(list);
System.out.println(list.toString());
}
}
程序運行結果:
[4, 5, 9, 13],這種簡單的排序直接按照自然順序進行升序排列。
2、list參數類型相對複雜的排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("張三", 5));
list.add(new User("李四", 30));
list.add(new User("王五", 19));
list.add(new User("陳十七", 17)); // 陳十七永遠十七歲
Collections.sort(list); // 按年齡排序
System.out.println(list.toString());
}
}
class User implements Comparable<User>{
private String name; //姓名
private int age; // 年齡
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getter && setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(User user) { //重寫Comparable接口的compareTo方法,
return this.age - user.getAge(); // 根據年齡升序排列,降序修改相減順序即可
}
}
程序運行結果:根據年齡升序排列
[User [name=張三, age=5], User [name=陳十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]
3、匿名內部類實現排序
public class sort {
public static void main(String[] args) {
List<User> list = new ArrayList<User>();
list.add(new User("張三", 5));
list.add(new User("李四", 30));
list.add(new User("王五", 19));
list.add(new User("陳十七", 17)); // 陳十七永遠十七歲
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
int diff = u1.getAge() - u2.getAge();
if (diff > 0) {
return 1;
}else if (diff < 0) {
return -1;
}
return 0; //相等爲0
}
}); // 按年齡排序
System.out.println(list.toString());
}
}
運行結果:[User [name=張三, age=5], User [name=陳十七, age=17], User [name=王五, age=19], User [name=李四, age=30]] (降序則使用u2 - u1)
總結:以上就是list排序經常用的幾種方法,前兩種方法都是通過實體實現Comparable接口並重寫compareTo方法,第一種方式之所以沒實現接口並實現compareTo方法,通過查看Interger類源碼可以看到,java已經幫我們實現好了,所以不用再次寫
最後一種方法通過匿名內部類實現Comparator接口實現compare方法,通過自定義比較器來實現排序。
List轉String[]數組:
List<String> strList = new ArrayList<>();
keysList.add("1");
keysList.add("2");
keysList.add("3");
String[] strs=strList .toArray(new String[strList .size()]);
List 轉換成 String:
public static String listToString(List<String> list){
if(list == null){
return null;
}
StringBuilder result = new StringBuilder();
boolean first = true;
//第一個前面不拼接","
for(String string :list) {
if(first) {
first=false;
}else{
result.append(",");
}
result.append(string);
}
return result.toString();
}
String 轉換成List :
private List<String> stringToList(String str){
if(StringUtil.isEmpty(str){
retrun;
}
String str[] = strs.split(",");
return Arrays.asList(str);
}