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
的空间满了,就会再进行动态内存分配策略,再去申请当前内存的相同空间,于是内存变为两倍