java list<实体> 集合排序问题 根据实体的 time属性,降序排列(距离现在时间越短,越靠前)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java list<实体> 集合排序问题 根据实体的 time属性,降序排列(距离现在时间越短,越靠前)相关的知识,希望对你有一定的参考价值。
请贴出代码,谢谢~
假如有一实体 student 属性: name 姓名;time 时间
List<student> ls;
请根据,实体 time属性排序~
time 为 java.util.date类型
java的话
String pat1 = "yyyy-MM-dd" ;
String datetime = "2001-02-02";
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ;
Date d3 = sdf1.parse(datetime);
long l =d3.getTime();
System.out.println(l);
这个可以把时间转换成数字. 然后比较数据就行了..... 参考技术A Date实例方法getTime(); 获取一个long型数据,越大的时间越往后
for(int i=0;i<ls.size();i++)
Student s =(Student)ls.get(i);
long = time = s.getTime().getTime(); //这里我没用你的属性time,实体应该封装get/set方法了。
最好的方法是自定义比较器,只是看你问的问题应该还是初学者,就先用上面简单好理解的代码吧 参考技术B MyComparator myComparator = new MyComparator();
Collections.sort(mList, myComparator);
public static class MyComparator implements Comparator<Student>
@Override
public int compare(Student o1, Student o2)
return o1.getTime().compareTo(o2.getTime());
参考技术C 例如 select * from student where time desc 不知道对不
JavaArrayList集合操作?
Java中list集合中存在某些字段相同的实体类,把那些指定字段相同的实体类合成一条,并且其中累加,该怎么操作,各位大佬😭😭
假设需要合并的实体类是一个Java类,包含了多个字段,其中需要合并的字段名为"fieldName",那么可以按照以下步骤进行操作:
定义一个Map,用于存储合并后的实体类,其中Key为"fieldName"的值,Value为合并后的实体类。
Map<Object, YourEntityClass> resultMap = new HashMap<>();
遍历List集合,对于每一个实体类,根据"fieldName"的值从Map中获取已经合并的实体类,如果不存在,则将当前实体类添加到Map中;如果存在,则将当前实体类的相应字段累加到已经存在的实体类中。
for (YourEntityClass entity : yourList)
Object key = entity.getFieldName();
if (resultMap.containsKey(key))
YourEntityClass existingEntity = resultMap.get(key);
// 累加相应字段
existingEntity.setSomeField(existingEntity.getSomeField() + entity.getSomeField());
else
resultMap.put(key, entity);
最终,将合并后的实体类从Map中取出来,组成一个新的List返回。
List<YourEntityClass> result = new ArrayList<>(resultMap.values());
这样,就可以实现根据某个字段值合并实体类并累加相应字段的操作。
参考技术A可以使用Java8的Stream API来实现将指定字段相同的实体类合并,并累加操作。具体实现步骤如下:
定义一个Map,用于存储指定字段相同的实体类;
遍历list集合中的每一个实体类,根据指定字段的值作为Map的key,将相同key的实体类放到同一个List中;
对每一个List中的实体类进行累加操作,并将结果更新到第一个实体类上;
将Map中的实体类转换成List返回。
示例代码如下:
import java.util.*;
import java.util.stream.Collectors;
public class Entity
private String field1;
private int field2;
public Entity(String field1, int field2)
this.field1 = field1;
this.field2 = field2;
public String getField1()
return field1;
public void setField1(String field1)
this.field1 = field1;
public int getField2()
return field2;
public void setField2(int field2)
this.field2 = field2;
public class Main
public static void main(String[] args)
List<Entity> list = new ArrayList<>();
list.add(new Entity("A", 1));
list.add(new Entity("B", 2));
list.add(new Entity("A", 2));
list.add(new Entity("B", 3));
Map<String, List<Entity>> map = list.stream()
.collect(Collectors.groupingBy(Entity::getField1));
List<Entity> result = new ArrayList<>();
for (List<Entity> entities : map.values())
Entity first = entities.get(0);
for (int i = 1; i < entities.size(); i++)
Entity entity = entities.get(i);
first.setField2(first.getField2() + entity.getField2());
result.add(first);
System.out.println(result);
上述代码中的Entity类表示实体类,包含两个字段:field1和field2。Main类中的main方法演示了如何将指定字段相同的实体类合并,并且将相同字段的field2值累加。运行该程序将输出以下结果:
[Entityfield1='A', field2=3, Entityfield1='B', field2=5]
其中,输出结果表示将list中的指定字段相同的实体类合并之后的结果。
参考技术B public List<Entity> mergeList(List<Entity> list)Map<String, Entity> map = new HashMap<>();
for (Entity entity : list)
String key = entity.getSpecifiedField(); // 获取指定字段的值作为key
Entity existEntity = map.get(key);
if (existEntity != null) // 如果存在相同的key,则将实体类对象累加
existEntity.setNum(existEntity.getNum() + entity.getNum());
existEntity.setAmount(existEntity.getAmount() + entity.getAmount());
else
map.put(key, entity); // 如果不存在相同的key,则将实体类对象放入Map中
return new ArrayList<>(map.values());
本回答被提问者采纳
以上是关于java list<实体> 集合排序问题 根据实体的 time属性,降序排列(距离现在时间越短,越靠前)的主要内容,如果未能解决你的问题,请参考以下文章