ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021年7月16日19:12:00

2021-07-16 19:30:50  阅读:184  来源: 互联网

标签:00 12 19 接口 boolean NavigableSet new Collector TreeSet


TreeSet简介
TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>, Cloneable, java.io.Serializable接口。
TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。
TreeSet 实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。
TreeSet 实现了Cloneable接口,意味着它能被克隆。
TreeSet 实现了java.io.Serializable接口,意味着它支持序列化。
TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
TreeSet为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。
另外,TreeSet是非同步的。 它的iterator 方法返回的迭代器是fail-fast的。
boolean                   add(E object)
boolean                   addAll(Collection<? extends E> collection)
void                      clear()
Object                    clone()
boolean                   contains(Object object)
E                         first()
boolean                   isEmpty()
E                         last()
E                         pollFirst()
E                         pollLast()
E                         lower(E e)
E                         floor(E e)
E                         ceiling(E e)
E                         higher(E e)
boolean                   remove(Object object)
int                       size()
Comparator<? super E>     comparator()
Iterator<E>               iterator()
Iterator<E>               descendingIterator()
SortedSet<E>              headSet(E end)
NavigableSet<E>           descendingSet()
NavigableSet<E>           headSet(E end, boolean endInclusive)
SortedSet<E>              subSet(E start, E end)
NavigableSet<E>           subSet(E start, boolean startInclusive, E end, boolean endInclusive)
NavigableSet<E>           tailSet(E start, boolean startInclusive)
SortedSet<E>              tailSet(E start)

自定义比较器排序; 

这种方法需要一个新的类实现Comparator<T>接口

重写其中的Compare 方法

        TreeSet<String> wifiSet = new TreeSet<String>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                JSONObject obj1 = JSON.parseObject(o1);
                JSONObject obj2 = JSON.parseObject(o2);
                return obj1.getDouble("distance").compareTo(obj2.getDouble("distance"));
            }
        });

然后, 改成函数式编程可以写成:

        Set<JSONObject> treeSet = new TreeSet<>((first, second) -> {
            JSONObject base1 = first.getJSONObject("base");
            String[] loc1 = base1.getString("location").split(", * ");
            JSONObject base2 = second.getJSONObject("base");
            String[] loc2 = base2.getString("location").split(", * ");
            
            Double d1 =  GeoUtils.getDistance(new Point(Double.valueOf(loc1[1]), Double.valueOf(loc1[0])),
                    new Point(lat, lng));
            Double d2 =  GeoUtils.getDistance(new Point(Double.valueOf(loc2[1]), Double.valueOf(loc2[0])),
                    new Point(lat, lng));
            
            return d1.compareTo(d2);
        });

Collector接口包含了一系列方法,为实现具体的归约操作(即收集器)提供了范本。Collector接口中实现的许多收集器,例如toList或groupingBy。这也意味着你可以为Collector接口提供自己的实现,从而自由创建自定义归约操作。

要开始使用Collector接口,我们先来看看toList的实现方法,这个在日常中使用最频繁的东西其实也简单。

Collector接口定义的5个函数


public interface Collector<T, A, R> { Supplier<A> supplier(); BiConsumer<A, T> accumulator(); BinaryOperator<A> combiner(); Function<A, R> finisher(); Set<Characteristics> characteristics(); }

  1. T是流中要收集的对象的泛型
  2. A是累加器的类型,累加器是在收集过程中用于累积部分结果的对象。
  3. R是收集操作得到的对象(通常但不一定是集合)的类型。

对于toList, 我们收集的对象是T, 累加器是List, 最终收集的结果也是一个List,于是创建ToListCollector如下:


public class ToListCollector<T> implements Collector<T, List<T>, List<T>>

标签:00,12,19,接口,boolean,NavigableSet,new,Collector,TreeSet
来源: https://blog.csdn.net/huochefei/article/details/118817196

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有