本文主要是介绍枚举和List的几个共有方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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<string>去重* @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
@NoArgsConstructor
public class Student {private String name;private int stuNum;private int age;
}
public class TestStream {/*** @Description 创建四个学生对象并设值,保存在list集合中,模拟数据* @author 刘鹏博* @return List<Student>*/public static List<Student> stuList() {List<Student> stuList = new ArrayList<Student>();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<Student> stuList = stuList();// JDK1.8提供了lambda表达式, 可以从stuList中过滤出符合条件的结果。// 定义结果集List<Student> 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的原理,很重要。
这篇关于枚举和List的几个共有方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!