博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
枚举和List的几个共有方法
阅读量:4211 次
发布时间:2019-05-26

本文共 3225 字,大约阅读时间需要 10 分钟。

1.如何判断一个值在枚举的元素中?

有时候我们需要判断一下一个值是否包含在一个枚举类型中,然后根据判断进行下一步操作。那么如何实现枚举类型的包含判断,而且能够像工具类一般的存在。所以我决定用反射来实现枚举类型的包含操作。但是唯一不足的地方是我们的method限定在getValue,也就是我们的枚举类的值必然要有一个value的值以及get、set方法。你还有什么更好的意见吗?有的话请留言,谢谢。

import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * @Author: tianjingle * @Date: 2019/8/14 17:26 */public class EnumUtil {    public static boolean isContrain(Class clazz,int type) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {        Object[] objs = clazz.getEnumConstants();        Method getValue=clazz.getMethod("getValue");        boolean flag=false;        for (Object vo:objs) {            if (getValue.invoke(vo).equals(type)){                flag=true;                break;            }else {                continue;            }        }        return flag;    }}

2.List如何去重?

我们知道HashSet除了在元素的存储上是无序的以外,还是不能够存储重复的元素。

HashSet如何判断元素是否重复呢?是根据元素继承的两个方法来判断,hashCode和equals,当存储元素时,首先判断要存入的元素和已存在的元素的哈希值是否相同,若不相同存入,若相同则利用equals判断两个元素是否相同,若不相同,则存入,若相同则放弃。而hashCode和equlas是在存入元素自动调用的。

所以我们第一想到的是将list转化为hashSet,然后将hashSet转回来。就可以实现List的去重。

/**     * list
去重 * @param list * @return */ public List removeDuplicate(List list) { HashSet h = new HashSet(list); list.clear(); list.addAll(h); return list; }

3.List如何筛选?

查找了很长时间,发现java8的特性是函数式编程,目前还不太懂。但我觉得应该是像建造者模式那种。在java8中提供了流技术,而流技术能够解决这个问题。具体流技术的原理可以看这篇文章:https://www.cnblogs.com/CarpenterLee/p/6637118.html

现在可以尝试写一下使用stream来筛选list。

定义Student

@Data@AllArgsConstructor@NoArgsConstructorpublic class Student {    private String name;    private int stuNum;    private int age;}
public class TestStream {    /**     * @Description 创建四个学生对象并设值,保存在list集合中,模拟数据     * @author 刘鹏博     * @return List
*/ public static List
stuList() { List
stuList = new ArrayList
(); Student stu1 = new Student(); stu1.setStuNum(20180823); stu1.setName("张三"); stu1.setAge(20); stuList.add(stu1); Student stu2 = new Student(); stu2.setStuNum(20180824); stu2.setName("李四"); stu2.setAge(21); stuList.add(stu2); Student stu3 = new Student(); stu3.setStuNum(20180825); stu3.setName("王二"); stu3.setAge(21); stuList.add(stu3); Student stu4 = new Student(); stu4.setStuNum(20180826); stu4.setName("张五"); stu4.setAge(22); stuList.add(stu4); return stuList; } public static void main(String[] args) { System.out.println(LitSourceType.Unknown);        List
 stuList = stuList(); // JDK1.8提供了lambda表达式, 可以从stuList中过滤出符合条件的结果。 // 定义结果集 List
result = null; result = stuList.stream() .filter((Student s) -> s.getAge()==21) .collect(Collectors.toList()); // 打印原有stuList集合中的数据 System.out.println("原有stuList集合中的数据"); stuList.forEach((Student s) -> System.out.println(s.getName() + "--->" + s.getAge())); // 打印过滤筛选后的result结果 System.out.println("过滤筛选后的result结果"); result.forEach((Student s) -> System.out.println(s.getName() + "--->" + s.getAge())); }}

这里我们筛选了21岁的同学。

至于stream的原理,很重要。

你可能感兴趣的文章
ThreadLocal学习笔记
查看>>
用talib实现基于emv的简易量化投资策略
查看>>
LongAdder源码解析
查看>>
Talib学习笔记(二)- 价格指数学习
查看>>
CAS机制是什么?
查看>>
Semaphore源码解析
查看>>
ConcurrentLinkedDeque源码解析
查看>>
ReentrantLock源码解析
查看>>
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>
JVM垃圾回收相关知识笔记
查看>>
Curator学习笔记(一)- 读写锁
查看>>
第一次炒股小记
查看>>
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>