从零开始SpringCloud Alibaba实战(76)——java8应用汇总

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;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值