java中List的常用方法
list方法整理
List最常用的几种方法
1.增删
添加方法是:.add(e); 获取方法是:.get(index);
删除方法是:.remove(index); 按照索引删除; .remove(Object o);
List<String> person=new ArrayList<>();
person.add("jackie"); //索引为0 //.add(e)
person.add("peter"); //索引为1
person.add("annie"); //索引为2
person.remove(1); //.remove(index)
person.remove("annie"); //.remove(Object o)
2.判断list中是否包含某个元素;
方法:.contains(Object o); 返回true或者false
List<String> fruits=new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
System.out.println("fruits中是否包含苹果:"+fruits.contains("苹果"));
3.List中根据索引将元素数值改变(替换);
方法:.set(index, element); 和 .add(index, element); 的不同;
String a="白龙马", b="沙和尚", c="八戒", d="唐僧", e="悟空";
List<String> people=new ArrayList<>();
people.add(a);
people.add(b);
people.add(c);
people.set(0, d); //.set(index, element); //将d唐僧放到list中索引为0的位置,替换a白龙马
people.add(1, e); //.add(index, element); //将e悟空放到list中索引为1的位置,原来位置的b沙和尚后移一位
System.out.println("people = " + people); //people = [唐僧, 悟空, 沙和尚, 八戒]
4.list中查看(判断)元素的索引;
方法:.indexOf(); 和 lastIndexOf()的不同;
List<String> names=new ArrayList<>();
names.add("刘备"); //索引为0
names.add("关羽"); //索引为1
names.add("张飞"); //索引为2
names.add("刘备"); //索引为3
names.add("张飞"); //索引为4
System.out.println(names.indexOf("刘备")); //0
System.out.println(names.lastIndexOf("刘备")); //3
System.out.println(names.indexOf("张飞")); //2
System.out.println(names.lastIndexOf("张飞")); //4
5.根据元素索引位置进行的判断;
if (names.indexOf("刘备")==0) {
System.out.println("刘备在这里");
}else if (names.lastIndexOf("刘备")==3) {
System.out.println("刘备在那里");
}else {
System.out.println("刘备到底在哪里?");
}
6.利用list中索引位置重新生成一个新的list(截取集合);
方法:.subList(fromIndex, toIndex); .size() ; 该方法得到list中的元素数的和
List<String> phone=new ArrayList<>();
phone.add("三星"); //索引为0
phone.add("苹果"); //索引为1
phone.add("锤子"); //索引为2
phone.add("华为"); //索引为3
phone.add("小米"); //索引为4
System.out.println("phone = " + phone); //phone = [三星, 苹果, 锤子, 华为, 小米]
//生成新list
phone=phone.subList(1, 4); //.subList(fromIndex, toIndex) //利用索引1-4的对象重新生成一个list,但是不包含索引为4的元素,4-1=3
System.out.println("phone.size() = " + phone.size()); //phone.size() = 3
System.out.println("phone = " + phone); //phone = [苹果, 锤子, 华为]
7.对比两个list中的所有元素;
//两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象
//1.
if (person.equals(fruits)) {
System.out.println("两个list中的所有元素相同");
}else {
System.out.println("两个list中的所有元素不一样");
}
//2.
if (person.hashCode()==fruits.hashCode()) {
System.out.println("我们相同");
}else {
System.out.println("我们不一样");
}
8.判断list是否为空;
方法://空则返回true,非空则返回false
if (person.isEmpty()) {
System.out.println("空的");
}else {
System.out.println("不是空的");
}
9.返回Iterator集合对象;
方法:.iterator()
Iterator<String> iterator = phone.iterator();
while (iterator.hasNext()){
System.out.println("iterator = " + iterator.next()); //循环
}
10.将集合转换为字符串;
String liString=person.toString();
11.将集合转换为数组;
String[] phones = (String[]) phone.toArray();
System.out.println("将集合转换为数组:"+phones);
12.集合类型转换;
List<StringBuffer> lst=new ArrayList<>();
for(String string:person){
lst.add(StringBuffer(string));
}
13.去重复;
List<String> lst1=new ArrayList<>();
lst1.add("aa");
lst1.add("dd");
lst1.add("ss");
lst1.add("aa");
lst1.add("ss");
//方法 1.
for (int i = 0; i <lst1.size()-1; i++) {
for (int j = lst1.size()-1; j >i; j--) {
if (lst1.get(j).equals(lst1.get(i))) {
lst1.remove(j);
}
}
}
System.out.println(lst1);
//方法 2.
List<String> lst2=new ArrayList<>();
for (String s:lst1) {
if (Collections.frequency(lst2, s)<1) {
lst2.add(s);
}
}
System.out.println(lst2);
//方法3
List<String> collect = lst1.stream().distinct().collect(Collectors.toList());
System.out.println(collect); //[aa, dd, ss]
(jdk8中)list通过里面对象的某个属性分组、分组求和、去重
java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。
1、实体类和list集合
//实体类
public class User {
private int id;
private String name;
private int age;
public User(int id,String name,int age){
this.id = id;
this.name = name;
this.age = age;
}
}
//创建list
List<User> users = new ArrayList<>();
users.add(new User(1,"A",8));
users.add(new User(2,"A",7));
users.add(new User(3,"A",6));
users.add(new User(4,"B",7));
users.add(new User(5,"B",6));
users.add(new User(6,"C",6));
users.add(new User(6,"C",6));
2、list 操作
/**
* 1,跟据某个属性(name)分组
**/
Map<String,List<User>> collectName = users.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(collectName);
/**
* 2,根据某个属性(name)分组,求age的和
**/
Map<String,Integer> collectNameSumAge = users.stream().collect(Collectors.groupingBy(User::getName,Collectors.summingInt(User::getAge)));
System.out.println(collectNameSumAge);
/**
* 3,取出一组对象的某个属性(name)组成一个新集合
*/
List<String> names = users.stream().map(User::getName).collect(Collectors.toList());
System.out.println(names);
/**
* 4,list去重复
*/
names = names.stream().distinct().collect(Collectors.toList());
System.out.println(names);
users = users.stream().distinct().collect(Collectors.toList());
System.out.println(users);
/**
* 5,根据某个属性(name)添加条件过滤数据
**/
users = users.stream().filter(user -> user.getName().equals("A")).collect(Collectors.toList());
System.out.println(users);
/**
* 6,判断一组对象里面有没有属性值是某个值
*/
boolean checkName = names.contains("A");
System.out.println(checkName);
boolean bool = users.stream().anyMatch(user -> "A".equals(user.getName()));
System.out.println(bool);
根据List集合中的对象的某一个属性进行排序
TestA testA1 = new TestA("老张", 3);
TestA testA2 = new TestA("老李", 1);
TestA testA3 = new TestA("老王", 2);
List<TestA> list = new ArrayList<>();
list.add(testA1);
list.add(testA2);
list.add(testA3);
System.out.println("排序前--:"+list.toString());
Collections.sort(list, new Comparator<TestA>() {
@Override
public int compare(TestA o1, TestA o2) {
//升序
return o1.getAge().compareTo(o2.getAge());
}
});
System.out.println("升序排序后--:"+list.toString());
Collections.sort(list, new Comparator<TestA>() {
@Override
public int compare(TestA o1, TestA o2) {
//降序
return o2.getAge().compareTo(o1.getAge());
}
});
System.out.println("降序排序后--:"+list.toString());
两个list取交差集
// 交集
List<String> listA_01 = new ArrayList<String>(){{
add("A");
add("B");
}};
List<String> listB_01 = new ArrayList<String>(){{
add("B");
add("C");
}};
listA_01.retainAll(listB_01);
System.out.println(listA_01); // 结果:[B]
System.out.println(listB_01); // 结果:[B, C]
// 差集
List<String> listA_02 = new ArrayList<String>(){{
add("A");
add("B");
}};
List<String> listB_02 = new ArrayList<String>(){{
add("B");
add("C");
}};
listA_02.removeAll(listB_02);
System.out.println(listA_02); // 结果:[A]
System.out.println(listB_02); // 结果:[B, C]
// 并集
List<String> listA_03 = new ArrayList<String>(){{
add("A");
add("B");
}};
List<String> listB_03 = new ArrayList<String>(){{
add("B");
add("C");
}};
listA_03.removeAll(listB_03);
listA_03.addAll(listB_03);
System.out.println(listA_03); // 结果:[A, B, C]
System.out.println(listB_03); // 结果:[B, C]
以上来自于网络整理出来的,只是自己用起来方便,没有起到商业用途