使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计

简介: 使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计

 1.lambda去重

public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
        return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null;
    }

image.gif

//对工号重复的进行去重
        ens=ens.stream().filter(distinctByKey(i->{
            return i.get("code");
        })).collect(Collectors.toList());

image.gif

2.lambda对map排序

package com.example;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.annotation.Order;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.*;
import java.util.stream.Collectors;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UeditorTestApplicationTests {
  @Test
  public void contextLoads() {
    Map<String,Object> map = new HashMap<>();
    map.put("1","oo1");
    map.put("2","oo1");
    map.put("3","oo1");
    Map<String,Object> map1 = new HashMap<>();
    map1.put("1","oo1");
    map1.put("2","oo2");
    map1.put("3","oo2");
    Map<String,Object> map2 = new HashMap<>();
    map2.put("1","oo2");
    map2.put("2","oo1");
    map2.put("3","oo1");
    List<Map> list = new ArrayList<>();
    list.add(map);
    list.add(map1);
    list.add(map2);
//    ArrayList<Map> collect = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
//        new TreeSet<>(Comparator.comparing(o -> (String) o.get("1")))), ArrayList::new));
//
//    System.out.println(collect);
//    ArrayList<Map> collect1 = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
//        new TreeSet<>((o1, o2) -> {
//          String i = (String) o1.get("2");
//          String j = (String) o2.get("2");
//          return i.compareTo(j);
//        })), ArrayList::new));
//
//    System.out.println(collect1);
    TreeSet<Map<String,Object>> t = new TreeSet<>((o1, o2) -> {
          String i = (String) o1.get("2");
          String j = (String) o2.get("2");
          return i.compareTo(j);
        });
    t.add(map);
    t.add(map1);
    t.add(map2);
    System.out.println(t);
  }
  class A {
  }
  class B implements Comparable {
    @Override
    public int compareTo(Object o) {
      return 0;
    }
  }
}

image.gif

3.lambda对List<Map>排序

list=list.stream().sorted(Comparator.comparing(m -> m.get("排序的字段").toString())).collect(Collectors.toList());
//按日期排序
  transferList = transferList.stream().sorted((d1, d2) -> {
                    if(d1.get("inTime")!=null&& d2.get("inTime")!=null){
                        Date date1 = DateUtils.parse((String) d1.get("inTime"), DateUtils.DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
                        Date date2 = DateUtils.parse((String) d2.get("inTime"), DateUtils.DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
                        return date1.compareTo(date2);
                    }
                    return 0;
                }).collect(Collectors.toList());

image.gif

4.lambda操作map根据key或者value排序,reversed()是倒序,正序就去掉.reversed()

public static <K extends Comparable<? super K>, V > Map<K, V> sortByKey(Map<K, V> map) {
        Map<K, V> result = new LinkedHashMap<>();
        map.entrySet().stream()
                .sorted(Map.Entry.<K, V>comparingByKey()
                        .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
        return result;
    }

image.gif

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
        Map<K, V> result = new LinkedHashMap<>();
        map.entrySet().stream()
                .sorted(Map.Entry.<K, V>comparingByValue()
                        .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
        return result;
    }

image.gif

5.按半小时统计结果值

public static void main(String[] args)throws Exception {
        List<Chart> charts=new ArrayList<>();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        charts.add(new Chart(format.parse("2020-01-01 01:10:00"),2d));
        charts.add(new Chart(format.parse("2020-01-01 01:20:00"),3d));
        charts.add(new Chart(format.parse("2020-01-01 01:40:00"),4d));
        charts.add(new Chart(format.parse("2020-02-01 01:50:00"),3d));
        charts.add(new Chart(format.parse("2020-01-01 02:20:00"),26d));
        Map<Long, Chart> collect = charts.stream().collect(Collectors.toMap(chart -> {
            System.out.println(chart.date.getTime()/(30*60*1000));
            return chart.date.getTime()/(30*60*1000);
        }, Function.identity(), (k1, k2) -> {
            return k1.date.getTime() > k2.date.getTime() ? k1 : k2;
        }));
        Map<String, Double> map=new HashMap<>();
        format = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat finalFormat = format;
        collect.forEach((k, v)->{
            //此处把v.date转换为半小时的标准格式
            String format1 = finalFormat.format(v.date);
            String hours = v.date.getHours()+"";
            int minutes = v.date.getMinutes();
            if (minutes>=0&&minutes<30){
                hours=format1+" "+hours+":00";
            }else {
                hours=format1+" "+hours+":30";
            }
            map.put(hours,v.value);
        });
        Map<String, Double> stringDoubleMap = sortByKey(map);
        System.out.println(stringDoubleMap);
    }
    public static  <K extends Comparable<? super K>, V > Map<K, V> sortByKey(Map<K, V> map) {
        Map<K, V> result = new LinkedHashMap<>();
        map.entrySet().stream()
                .sorted(Map.Entry.<K, V>comparingByKey()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
        return result;
    }
    static class Chart{
        public Date date;
        public Double value;
        public Chart(Date date, Double value) {
            this.date = date;
            this.value = value;
        }
    }

image.gif

6.lambda去重,支持根据条件有选择进行过滤去重

static class User{
    String id;
    String name;
    public String getId() {
      return id;
    }
    public void setId(String id) {
      this.id=id;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
  }
  public static void main(String[] args) throws Exception {
    List<User> distinctList = new ArrayList();
    User user1 = new User();
    user1.setId("1");
    user1.setName("11");
    distinctList.add(user1);
    User user2 = new User();
    user2.setId("2");
    user2.setName("21");
    distinctList.add(user2);
    User user3 = new User();
    //user3.setId("3");
    user3.setName("31");
    distinctList.add(user3);
    User user4 = new User();
    //user4.setId("4");
    user4.setName("31");
    distinctList.add(user4);
    //list是需要去重的list,返回值是去重后的list
    List<User> res = distinctList.stream().collect(
        Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> {
          if (StringUtils.isNotBlank(o.getId())) {
            return o.getName();
          }
          return o.getName();
        }))), ArrayList::new));
    //筛选
    List<User> users=distinctList.stream().collect(Collectors.toMap(key->key.getName(),value->value,(v1,v2)->{
      if(v1.getId()!=null){
        return v1;
      }else if(v2.getId()!=null){
        return v2;
      }
      return v1;
    })).values().stream().collect(Collectors.toList());
    //res = distinctList.stream().filter(ls->ls.getId().equals("222")).collect(Collectors.toList());
    System.out.println(users);
  }

image.gif

7.Java一个集合中根据,获取某一个日期对象最大值得对象

Optional<Person> max = personList.stream().max(Comparator.comparing(Person::getCreateDate));
Person person= max.get();

image.gif


相关文章
|
7月前
|
Go
go map进行有序的排序
go map进行有序的排序
59 0
|
7月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
73 0
|
2月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
22 0
lambda表达式操作map
lambda表达式操作map
|
7月前
|
算法 测试技术 C#
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
|
7月前
|
存储 JavaScript 前端开发
JavaScript实现Map并排序
JavaScript实现Map并排序
134 0
|
7月前
|
存储 Java API
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
196 0
|
7月前
|
C++
c++ set、map的四种自定义排序方法
c++ set、map的四种自定义排序方法
406 0
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
186 5
|
7月前
|
算法 测试技术 C++
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II