JAVAlistCD的简单介绍
今天给各位分享JAVAlistCD的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java中如何去除List中的重复的值
你要去除的值是基本数据类型还是对象呢?
如果不想存重复数据何不用Set呢。。。
其实吧。。在知道上提问不如在网页上查。。这个是我查到的第一个。。网页里的内容,他一共使用了3种方式
最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。
但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢?
试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。
//set集合去重,不打乱顺序
public static void main(String[] args){
ListString list = new ArrayListString();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
Set set = new HashSet();
List newList = new ArrayList();
for (String cd:list) {
if(set.add(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}123456789101112131415161718
//遍历后判断赋给另一个list集合
public static void main(String[] args){
ListString list = new ArrayListString();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
ListString newList = new ArrayListString();
for (String cd:list) {
if(!newList.contains(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}1234567891011121314151617
//set去重
public static void main(String[] args){
ListString list = new ArrayListString();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(list);
newList.addAll(set);
System.out.println( "去重后的集合: " + newList);
}12345678910111213141516
//set去重(缩减为一行)
public static void main(String[] args){
ListString list = new ArrayListString();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
List newList = new ArrayList(new HashSet(list));
System.out.println( "去重后的集合: " + newList);
}12345678910111213
hashset不进行排序,还有一种方法是用treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)
//去重并且按照自然顺序排列
List newList = new ArrayList(new TreeSet(list));
Java中list如何利用遍历进行删除操作
方法有很多,比如可以在for和foreach 等循环遍历,然后删除,
下面在介绍两种方案. 第一种.迭代循环, 然后删除. 第二种java8开始的流操作
import java.util.*;
import java.util.stream.Collectors;
public class MyListDemo {
public static void main(String[] args) {
test1(); //传统方法
test2(); // java8开始的新方法
}
// 传统的方法
public static void test1() {
// 创建一个list类
ListString list = new ArrayList(Arrays.asList("ab", "cd", "11", "ef"));
// 迭代遍历查找
IteratorString it = list.iterator();
while (it.hasNext()) {
String x = it.next();
if (x.equals("11")) {
it.remove(); // 用迭代器删除
}
}
System.out.println(list);
}
//下面是 JAVA8的处理方式
private static void test2() {
ListString list2=new ArrayList(Arrays.asList("ab","cd","11","ef"));
ListString list3=list2
.stream() //得到流,准备进行流处理
.filter(x-!x.equals("11")) // 过滤掉等于"11"的元素
.collect(Collectors.toList()); // 收集起来
System.out.println(list3);
}
}
JAVA中list排序问题
分不多,不过正好我研究了这里,也算给自己做个总结:
我为了方便解释、写了一个测试类
/** test for reflex */
public class Model {
private String name;
private String content;
public Model(){
this.name = "my name";
this.content = "a long text";
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getContent() {
return content;
}
//测试
public void test() throws Exception{
Model model = new Model();
Method m1 = model.getClass().getMethod("getName", null);
System.out.println(m1.invoke(model, null));
}
public static void main(String args[]){
try {
new Model().test("getName");
} catch (Exception e) {
e.printStackTrace();
}
}
}
首先调用test,传递一个method过去;
通过反射机制(这里用到了getMethod、invoke,我比较喜欢getField)、获取到m1对象的getName方法,getMethod第一个参数为方法名、第二个是给这个method的参数的类型,
If parameterTypes is null, it is treated as if it were an empty array,如果为null,表示没有参数;(即 getName()方法);
然后在通过 invoke 注入参数;第一个是相应对象的引用、第二个是参数值(刚刚的是类型,现在才是值);
If the underlying method is static, then the specified obj argument is ignored. It may be null,也就是说static的方法第一个参数是null;
我们要调用的是getName(),那么就是 m1.invoke(model,null)了;
执行结果为:my name ;相当于调用了getName()方法.
绕了一圈也就是 model.getName() == model.getClass().getMethod("getName",null).invoke(model,null);
对于有参数的,调整为
public void test(String method) throws Exception{
Model model = new Model();
Method m1 = model.getClass().getMethod(method, String.class);
m1.invoke(model, "can you");
System.out.println(model.getName());
}
结果:can you
接下来上边的题目就简单了,
public void Sort(ListE list, final String method, final String sort){
这里给出了method,接下来是一个内部类的处理;自定义一个comparator,
Method m1 = ((E) a).getClass().getMethod(method, null);
这里就是获取method方法,他没有参数。
m1.invoke(((E)a), null).toString()
这里是得到对象a调用方法method之后的返回值。
ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
而这里就是比较两个对象method方法的返回值
将ret交给sort进行排序;
就像3楼说的、真正排序的是sort方法,下面的只是对一个类中某个方法的返回值进行比较
JAVAlistCD的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、JAVAlistCD的信息别忘了在本站进行查找喔。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。