文章目录
- 1.合并两个list集合(集合中的元素为对象)
- 2.获取list集合中对象的某个属性
- 3.从某对象Project这个类组成的List中取出id和name组成对应的键值对
- 4.高效去除一个list中包含的另一个list
- 5.去重
- 获取集合中的所有id用,隔开。
- forEach便利集合对象
- 遍历map对象
- anyMatch,allMatch,noneMatch
- Optional使用
- 计算
- Map删除值为null的元素
- 使用List.remove()方法的正确姿势
- Java ArrayList使用技巧 - 从第一个List中去除所有第二个List中与之重复的元素
- Java一个List中的部分字段赋值给另一个List
- 筛选出List不被另一个List包含的元素
- java8 .stream().filter() 代替嵌套for循环 lambda表达式
1.合并两个list集合(集合中的元素为对象)
List userList= Stream.of(userList1,userList2).flatMap(Collection::stream).distinct().collect(Collectors.toList());
2.获取list集合中对象的某个属性
List userNameList = userList.stream().map(User::getUserName).collect(Collectors.toList());
3.从某对象Project这个类组成的List中取出id和name组成对应的键值对
Map<Long, String> nameMap = null;
nameMap = allProjects.stream().filter(project -> Status.ENABLE.equals(project.getStatus()))
.collect(Collectors
.toMap(Project::getId, Project::getName, (value1, value2) -> value2));
4.高效去除一个list中包含的另一个list
List<Long> list=new ArrayList<>();
List<Long> list1=Arrays.asList(1L,2L,3L,4L,5L,6L);
List<Long> list2=Arrays.asList(4L,5L,6L);
HashSet h1 = new HashSet(list1);
HashSet h2 = new HashSet(list2);
h1.removeAll(h2);
list.addAll(h1);
//打印结果为:[1, 2, 3]
System.out.println(list);
5.去重
// 根据id去重
List<Person> persons =
Arrays.asList(
new Person("Max", 18,1),
new Person("Peter", 23,2),
new Person("Pamela", 23,3),
new Person("Pamela", 23,3),
new Person("David", 12,4));
List<Person> unique = persons.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparingLong(Person::getId))), ArrayList::new)
);
获取集合中的所有id用,隔开。
//1. 获取集合中的所有id用,隔开。
//List<Classes> list
String ids = list.stream().map(x->String.valueOf(x.getClassesId())).collect(Collectors.joining(","));
forEach便利集合对象
//forEach遍历集合对象
//List<Member> bmlist
bmlist.forEach(member->{//实体对象
if (StringUtils.isNotEmpty(member)) {
//业务处理
}
});
遍历map对象
//Map<String , String> map
map.forEach((k,v)->{
System.out.println(“key=”+k+“,value=”+v);
});
anyMatch,allMatch,noneMatch
//只要有一个条件满足即返回true
boolean anyMatch(Predicate<? super T> predicate)
//必须全部都满足才会返回true
boolean allMatch(Predicate<? super T> predicate)
//全都不满足才会返回true
boolean noneMatch(Predicate<? super T> predicate)
//应用实例,List itemIds,inspectItem对象,有匹配值返回true
boolean flag = (!itemIds.isEmpty() &&
itemIds.stream().anyMatch(
item->item.equals(inspectItem.getItemId())));
Optional使用
Optional represent = list.stream().filter(m-> m.getRelation().equals(“户主”)).findFirst();
if (represent.isPresent()) {//exist
mmap.put(“represent”, represent.get());//获取对象
}
//判空,可返回默认
Optional.ofNullable(represent).orElse(other);//orElseGet()
计算
//BigDecimal
BigDecimal total = list.stream().map(ReturnMoney::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
//mapToDouble,mapToInt,mapToLong
Double total = list.stream().mapToDouble(ReturnMoney::getAmount()).sum()//和;.max()//最大;.min()//最小;.average()//平均值
Map删除值为null的元素
map.entrySet().removeIf(entry -> entry.getValue() == null);
使用List.remove()方法的正确姿势
避免比如list中的id=6的元素删除后,剩下的元素前移,原来id=7元素就没有被删除。
collect = list.stream().filter(categoryDo -> !"a".equals(categoryDo.getOnline()))
.collect(Collectors.toList());
Java ArrayList使用技巧 - 从第一个List中去除所有第二个List中与之重复的元素
需求:从 mAllList 中去除所有 mSubList 中与之重复的元素
测试数据:mAllList 中包含100000个无序无重复字符串,mSubList 中包含50000个无序无重复字符串
利用HashMap(效率最高)
//第一步:构建mAllList的HashMap
//将mAllList中的元素作为键,如果不是String类,需要实现hashCode和equals方法
//将mAllList中的元素对应的位置作为值
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < mAllList.size(); i++) {
map.put(mAllList.get(i), i);
}
//第二步:利用map遍历mSubList,查找重复元素
//把mAllList中所有查到的重复元素的位置置空
for (int i = 0; i < mSubList.size(); i++) {
Integer pos = map.get(mSubList.get(i));
if (pos==null) {
continue;
}
mAllList.set(pos, null);
}
//第三步:把mAllList中所有的空元素移除
for (int i = mAllList.size()-1; i>=0; i--) {
if (mAllList.get(i)==null) {
mAllList.remove(i);
}
}
Java一个List中的部分字段赋值给另一个List
demoList.stream().map(result -> new DemoListVO(result.getKeyNo(), result.getName())).collect(Collectors.toList());
筛选出List不被另一个List包含的元素
List<String> delTagGroup = new ArrayList<>();//需要删除的
List<String> originGroupId = qwTagGroupEntityList.stream().map(QwTagGroupEntity::getGroupId).collect(Collectors.toList());//原有的
List<String> newGroupId = corpTagList.getTag_group().stream().map(CorpTagList.TagGroupBean::getGroup_id).collect(Collectors.toList());//新的
delTagGroup = originGroupId.stream().filter(o->!newGroupId.contains(o)).collect(Collectors.toList());//新的不在原有里面的
java8 .stream().filter() 代替嵌套for循环 lambda表达式
筛选出两个list中name和color相同的元素
public class TestController {
@Data
static class Car {
private String name;
private String color;
}
public static void main(String[] args) {
List<Car> listCar1 = constructCar1();
List<Car> listCar2 = constructCar2();
System.out.println("listCar1的值: " + JSON.toJSON(listCar1));
System.out.println("listCar2的值" + JSON.toJSON(listCar2));
//嵌套for循环操作
List<Car> listCarNew1 = new ArrayList<>();
for (Car car1 : listCar1) {
for (Car car2 : listCar2) {
if (car1.getName().equals(car2.getName()) && car1.getColor().equals(car2.getColor())) {
Car car = new Car();
BeanUtils.copyProperties(car1, car);
listCarNew1.add(car);
}
}
}
System.out.println("嵌套for循环筛选后的结果" + JSON.toJSON(listCarNew1));
//java 8 stream操作
List<Car> listCarNew2 = listCar1.stream().filter(a -> listCar2.stream()
.anyMatch(b -> a.getColor().equals(b.getColor()) && a.getName().equals(b.getName())))
.collect(Collectors.toList());
System.out.println("stream操作筛选后的结果" + JSON.toJSON(listCarNew2));
}
public static List<Car> constructCar1() {
List<Car> listOld = new ArrayList<>();
Car car1 = new Car();
car1.setName("A");
car1.setColor("红");
Car car2 = new Car();
car2.setName("B");
car2.setColor("黄");
Car car3 = new Car();
car3.setName("C");
car3.setColor("蓝");
Car car4 = new Car();
car4.setName("D");
car4.setColor("黑");
listOld.add(car1);
listOld.add(car2);
listOld.add(car3);
listOld.add(car4);
return listOld;
}
public static List<Car> constructCar2() {
List<Car> listOld = new ArrayList<>();
Car car1 = new Car();
car1.setName("A");
car1.setColor("红");
Car car2 = new Car();
car2.setName("B");
car2.setColor("黄");
Car car3 = new Car();
car3.setName("E");
car3.setColor("绿");
listOld.add(car1);
listOld.add(car2);
listOld.add(car3);
return listOld;
}
}