Java和Go具体代码的使用
Java之List去重
有时业务场景需要针对一个 List 中的数据进行去重
如果是根据类对象去重可能还好,甚至不用重写 hashCode()方法和 equals()方法;
但是如果对对象中某个成员变量去重,就稍显麻烦,这时候可以借助 java8 的特性来去重
例如下语句,实现 users列表 中针对 name属性 去重,得到新的不含 name重复项 的 deleteRepeatUsers 列表
1 | List<Problem> deleteRepeatUsers = users.stream().collect( |
其中:
.stream()将users转换为一个流,后续使用流操作处理.collect()和.Collectors.toCollection()都用于将流中元素收集到一个集合(Collection)中,后者返回一个收集器(Collect)Collectors.collectingAndThen()包装另一个收集器,用于在使用其他收集器收集数据后对产生一个最终的结果(中转站)() -> new TreeSet<>(Comparator.comparing(User::getName))是一个Lambda表达式,表示一个无参构造函数的引用:创建一个新的TreeSet对象,并传递一个Comparator,通过User:getName方法引用定义排序(过滤)规则
综上,users转换成流收集后,数据经过TreeSet去重再转换回ArrayList容器
Go之make()函数
make(type, len, cap)
type: 数据类型len: 实际占用空间cap: 预留空间
内存分配: 先是只会去用len的空间,如果空间不够,再去拿cap的空间,这样避免了二次内存分配,提高效率。如果cap的空间或者在未指定cap的情况下len的空间满了,就会再进行动态内存分配策略,再去申请当前内存的相同空间,于是内存变为两倍