- 类 型
- 计算机专业术语
- 区别于
- vector
- 中文名
- list
- 一般定义
- 一览表; 明细表; 目录; 名单
-
实现集合List中的元素进行排序
2016-06-14 22:08:32Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static ...Collections对List集合中的数据进行排序
有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到Java中提供的对集合进行操作的工具类Collections,其中的sort方法
先看一个简单的例子:
public static void main(String[] args) { List<Integer> nums = new ArrayList<Integer>(); nums.add(3); nums.add(5); nums.add(1); nums.add(0); System.out.println(nums); Collections.sort(nums); System.out.println(nums); }
输出结果:
[3, 5, 1, 0]
[0, 1, 3, 5]稍微复杂的List里面放一个复杂的对象
package core.java.collection.collections; public class User implements Comparable<User>{ private int score; private int age; public User(int score, int age){ super(); this.score = score; this.age = age; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(User o) { int i = this.getAge() - o.getAge();//先按照年龄排序 if(i == 0){ return this.score - o.getScore();//如果年龄相等了再用分数进行排序 } return i; } } public static void main(String[] args) { List<User> users = new ArrayList<User>(); users.add(new User(78, 26)); users.add(new User(67, 23)); users.add(new User(34, 56)); users.add(new User(55, 23)); Collections.sort(users); for(User user : users){ System.out.println(user.getScore() + "," + user.getAge()); } }
输出结果:
55,23
67,23
78,26
34,56
我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现
compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
了Comparable接口,Java已经给我们做好了。
Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:package core.java.collection.collections; public class Students { private int age; private int score; public Students(int age, int score){ super(); this.age = age; this.score = score; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } public static void main(String[] args) { List<Students> students = new ArrayList<Students>(); students.add(new Students(23, 100)); students.add(new Students(27, 98)); students.add(new Students(29, 99)); students.add(new Students(29, 98)); students.add(new Students(22, 89)); Collections.sort(students, new Comparator<Students>() { @Override public int compare(Students o1, Students o2) { int i = o1.getScore() - o2.getScore(); if(i == 0){ return o1.getAge() - o2.getAge(); } return i; } }); for(Students stu : students){ System.out.println("score:" + stu.getScore() + ":age" + stu.getAge()); } }
输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23
从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法
中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。
以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。 -
使用 Java8的 stream对list数据去重,使用filter()过滤列表,list转map
2018-09-12 14:00:50list去重,根据对象某个属性、某几个属性去重 去除List中重复的String List unique = list.stream().distinct().collect(Collectors.toList()); 去除List中重复的对象 // Person 对象 public class ...list去重,根据对象某个属性、某几个属性去重
去除List中重复的String
List unique = list.stream().distinct().collect(Collectors.toList());
去除List中重复的对象
// Person 对象 public class Person { private String id; private String name; private String sex; <!--省略 get set--> }
// 根据name去重 List<Person> unique = persons.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new) );
// 根据name,sex两个属性去重 List<Person> unique = persons.stream().collect( Collectors. collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" + o.getSex()))), ArrayList::new) );
filter()过滤列表
List<Person> filterList = persons.stream().filter(p -> p.getSex().equals(1)).collect(Collectors.toList());
List转Map
从一个Person对象的List集合,取出
id
和name
组成一个map集合Map<String, String> collect = list.stream().collect(Collectors.toMap(p -> p.getId(), p -> p.getName()));
从 List 中取出某个属性的组成 list 集合
//1.提取出list对象中的一个属性 List<String> stIdList1 = stuList.stream().map(Person::getId).collect(Collectors.toList()); //2.提取出list对象中的一个属性并去重 List<String> stIdList2 = stuList.stream().map(Person::getId).distinct().collect(Collectors.toList());
-
List数据去重的五种有效方法
2019-07-16 15:25:35List去重方案方案一 方案一 /** * 去除重复数据 * * @param list */ public List<Map<String, Object>> distinct(List<Map<String, Object>> list) { final boolean sta =.....List去重方案
方案一:借助Set的特性进行去重
/** * 去除重复数据 * 由于Set的无序性,不会保持原来顺序 * @param list */ public static List<String> list distinct(List<String> list) { final boolean sta = null != list && list.size() > 0; List doubleList= new ArrayList(); if (sta) { Set set = new HashSet(); set.addAll(list); doubleList.addAll(set); } return doubleList; }
方案二 : 利用set集合特性保持顺序一致去重
// Set去重并保持原先顺序的两种方法 public static void delRepeat(List<String> list) { //方法一 List<String> listNew = new ArrayList<String>(new TreeSet<String>(list)); //方法二 List<String> listNew2 = new ArrayList<String>(new LinkedHashSet<String>(list)); }
方案三 : 使用list自身方法remove()–>不推荐
/** * 去除重复数据(一般不推荐) * 类似于冒泡排序思想 * @param list */ public static List<Map<String, Object>> distinct(List<Map<String, Object>> list) { if (null != list && list.size() > 0) { //循环list集合 for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) { // 这里是对象的比较,如果去重条件不一样,在这里修改即可 if (list.get(j).equals(list.get(i))) { list.remove(j); } } } } //得到最新移除重复元素的list return list; }
方案四 : 遍历List集合,将元素添加到另一个List集合中
// 遍历后判断赋给另一个list集合,保持原来顺序 public static List<String> delRepeat(List<String> list) { List<String> listNew = new ArrayList<String>(); for (String str : list) { if (!listNew.contains(str)) { listNew.add(str); } } return listNew ; }
方案5 : 使用Java8特性去重
public static List<String> delRepeat(List<String> list) { List<String> myList = list.stream().distinct().collect(Collectors.toList()); return myList ; }
-
python 两个list 求交集,并集,差集
2016-06-09 17:59:52在python中,数组可以用list来表示。如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢? 当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多...项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
经常有同学私信或留言询问相关问题,V号bitcarmanlee。github上star的同学,在我能力与时间允许范围内,尽可能帮大家解答相关问题,一起进步。在python中,数组可以用list来表示。如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢?
当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多的技术含量,本博主就不解释了。这里给大家使用更为装bility的一些方法。老规矩,talk is cheap,show me the code
#!/usr/bin/env python #coding:utf-8 ''' Created on 2016年6月9日 @author: lei.wang ''' def diff(listA,listB): #求交集的两种方式 retA = [i for i in listA if i in listB] retB = list(set(listA).intersection(set(listB))) print "retA is: ",retA print "retB is: ",retB #求并集 retC = list(set(listA).union(set(listB))) print "retC1 is: ",retC #求差集,在B中但不在A中 retD = list(set(listB).difference(set(listA))) print "retD is: ",retD retE = [i for i in listB if i not in listA] print "retE is: ",retE def main(): listA = [1,2,3,4,5] listB = [3,4,5,6,7] diff(listA,listB) if __name__ == '__main__': main()
让code run起来
retA is: [3, 4, 5] retB is: [3, 4, 5] retC1 is: [1, 2, 3, 4, 5, 6, 7] retD is: [6, 7] retE is: [6, 7]
结合代码来看,大体上是两种思路:
1.使用列表解析式。列表解析式一般来说比循环更快,而且更pythonic显得更牛逼。
2.将list转成set以后,使用set的各种方法去处理。 -
数组,List,Set相互转化
2018-06-03 23:41:29转载:https://blog.csdn.net/my_precious/article/details/530102321.数组转化为List:String[] strArray= new String[]{"...List strList= Arrays.asList(strArray);2.数组转SetString[] strArray= new Stri... -
pandas DataFrame数据转为list
2017-05-21 22:46:10首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:# -*- coding:utf-8-*- import numpy as np import pandas as pddata_x = pd.read_csv("E:/... -
Java数组转List的三种方式及对比
2018-03-18 00:10:04本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。 -
java根据list中对象的属性找出list重复数据或去除list重复数据
2017-11-17 15:12:50在实际开发中,经常会遇到需要找出(删除)一个list中某些元素的属性相同的元素,或者两个list中某些元素的属性相等的元素,这种方法很多,这里整理列出一些: 废话不说,上代码,有注释掉的你们自己看import java.... -
获取List中存放的最后一个元素
2018-06-18 20:39:41public class ListUtil { ... * 获取list中存放的最后一个元素 * @param list * @param <T> * @return */ public static <T> T getLastElement(List<T> list) { re... -
list indices must be integers or slices, not tuple
2017-08-29 12:13:34以下两种情况都会出现此错误: points = [ [1, 2], ...list的维数必须一致:正确写法: points = [ [1, 2], [0, 4], [2, 0] ] 这个也会报错: stations = ['Schagen', 'Heerhugow... -
Java编程:删除 List 元素的三种正确方法
2016-11-30 16:44:59删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化; 对 List 进行删除操作可能会产生并发问题; 我们通过代码示例演示正确的删除逻辑package com.ips.list;import java.util.ArrayList;... -
Pandas把dataframe或series转换成list
2019-08-12 12:25:15把dataframe转换为list 输入多维dataframe: df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9], 'b':[3,5,6,2,4,6,7,8,7,8,9]}) 把a列的元素转换成list: # 方法1 df['a'].values.tolist() # 方法2 df['a'].... -
List转JSONArray和JSONArray转List
2019-08-19 20:59:331.List转JSONArray List<T> list = new ArrayList<T>(); JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); 2.JSONArray转List JSONArray array = new JSONArray(); List<... -
fastjson List转JSONArray以及JSONArray转List
2018-05-31 11:25:541.fastjson List转JSONArrayList<T> list = new ArrayList<T>();JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));2.fastjson JSONArray转ListJSONArray array = ... -
List转Map的三种方法
2018-04-03 13:26:33List转Map三种方法。 -
list的五种去重方法
2018-10-31 10:12:35面试中经常被问到的list如何去重,一般是口述,不需要代码体现,这个时候,思维一定要清晰,可以罗列出集中去重的方法,以展现你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固 下面,我就将五种方法逐一... -
python中list与string的转换
2019-05-15 13:00:141.list转string 命令:''.join(list) 其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等 如: list = [1, 2, 3, 4, 5] ''.join(list) 结果即为:12345 ','.join(list) 结果即为:1,2,3,4,5 str=... -
vsftpd中关于ftpusers和user_list两个文件的说明以及vsftpd.conf中的userlist_enable和userlist_deny两个...
2014-12-31 09:09:30问题一:ftpusers和user_list两个文件各自的用途是什么?有何关系?首先请明确一点:ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理... -
【Java面试题】List如何一边遍历,一边删除?
2020-03-20 12:10:36List如何一边遍历,一边删除? -
unable to access android sdk add-on list
2016-01-22 17:01:15unable to access android sdk add-on list 原因: 在第一次安装AS,启动后,检测到电脑没有SDK。 知道了原因,自然有解决方法,可以在以后安装sdk,或者设置初次打开AS,不下载sdk 解决方法: 第一种... -
list stream:计算对象List中某个字段的总和
2019-03-17 02:29:21计算一个number类型的List对象总和 Integer[] integerArray = {1, 3, 5, 10, 18}; List<Integer> list = new ArrayList<>(Arrays.asList(integerArray)); IntSummaryStatistics ... -
List集合的各种排序
2019-02-15 17:56:39在Java编程中,经常要对List集合进行排序,因此对List排序的各种情况进行总结,希望对各位读者有所帮助。 1.单属性变量List排序 1.1按照变量属性升序,降序排序 /** * 单属性变量list 自身属性升序, 降序排序 ... -
Python中如何求列表list的平均数
2019-09-28 10:12:07Python中如何求列表list的平均数 当列表list中只包含数字时,如何求取它的平均数: from numpy import * a = [52,69,35,65,89,15,34] b = mean(a) print(b) 运行结果: 51.285714285714285 ... -
List转换成String字符串三种方式
2019-08-15 11:58:34List转换成String字符串思路分析: 1.List转化成String[],再通过String[]数组遍历拼接成String字符串; 2.List转化成String存到StringBuffer中,再通过StringButter中的append()方法拼接成String字符串; 注意:... -
java怎么获取list长度
2018-06-19 20:08:38java 怎么获取list长度java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()... -
Java中List的详细用法
2018-09-11 16:36:43list中添加,获取,删除元素; list中是否包含某个元素; list中根据索引将元素数值改变(替换); list中查看(判断)元素的索引; 根据元素索引位置进行的判断; 利用list中索引位置重新生成一个新的list(截取... -
DataFrame按照行(列)转成List
2020-09-27 18:06:331、每一行为一个元素 res = df.values.tolist() 2、每一列为一个元素 columns = df.columns res = [] for c in columns: d = df[c].values.tolist() res.append(d) -
将Object转换成List
2019-08-27 20:01:29java中如果需要将一个object转成list,大部分人会直接使用强制类型转换:(List<String>) obj这样。这样强制转换编译会提示Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>',... -
vsftpd 配置:chroot_local_user与chroot_list_enable详解
2015-01-05 09:24:38很多情况下,我们希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上的其他目录,这时候我就需要使用到chroot_local_user,chroot_list_enable,chroot_list_file这三个选项了... -
List和List的区别
2020-12-19 10:02:17在List、Set、Map中经常见到,用来限制Class中的参数类型,确保Class中参数的一致性。例如:List<String> list = new ArrayList<>();创建了一个内部参数是String类型的类,list中的操作对象都是String。...