Java List<Object> 根据Object中channelTime字段从小到大排序,并输出最终的List<Object>

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java List<Object> 根据Object中channelTime字段从小到大排序,并输出最终的List<Object>相关的知识,希望对你有一定的参考价值。

List<Object> 格式如下,希望可以按channelTime字段从小到大排序
[
"channelEmpcode":"N09840","channelDepartment":"","channelType":"","[
"channelEmpcode":"N09840","channelDepartment":"","channelType":"","channelTime":"2017-03-15 00:48:14","channelStatus":"加入会议", "channelEmpcode":"N09840","channelDepartment":"","channelType":"","channelTime":"2017-03-15 00:48:53","channelStatus":"退出会议", "channelEmpcode":"S49248","channelDepartment":"技术中心","channelType":"","channelTime":"2017-03-15 00:48:18","channelStatus":"加入会议", "channelEmpcode":"S49248","channelDepartment":"技术中心","channelType":"","channelTime":"2017-03-15 00:48:46","channelStatus":"退出会议"
]":"2017-03-15 00:48:14","channelStatus":"加入会议", "channelEmpcode":"N09840","channelDepartment":"","channelType":"","channelTime":"2017-03-15 00:48:53","channelStatus":"退出会议", "channelEmpcode":"S49248","channelDepartment":"技术中心","channelType":"","channelTime":"2017-03-15 00:48:18","channelStatus":"加入会议", "channelEmpcode":"S49248","channelDepartment":"技术中心","channelType":"","channelTime":"2017-03-15 00:48:46","channelStatus":"退出会议"
]

参考技术A 在TimeZone类中有个静态方法 getAvailableIDs(int rawoffset) 可以获取rawoffset对应的所有的时区id,其中参数表示时间偏移量,用毫秒表示,例如东八区,则为8*60*60*1000。有了区域ID,就可以根据静态方法getTimeZone(String zoneId)获取对应的区域了。

所以获取一个时间对应的所有区域就可以实现为:
TimeZone tz = TimeZone.getDefault();
int rawOffset = 8;
String[] ids = TimeZone.getAvailableIDs(rawOffset * 60 * 60 * 1000);
for (String id : ids)
tz = TimeZone.getTimeZone(id);
针对题主的要求,拿到tz之后,需要获得下一个时区,可以这样实现

TimeZone tz = TimeZone.getTimeZone("GMT+8:00");
int x = 1;//可以为-2、-1、1、2。。。先获取rawoffset,再获取时区
int rawOffset = tz.getRawOffset() + x * 60 * 60 * 1000;
String[] ids = TimeZone.getAvailableIDs(rawOffset);
for (String id : ids)
TimeZone nexttz = TimeZone.getTimeZone(id);

在 Java 中将 List<Object> 转换为 String[]

【中文标题】在 Java 中将 List<Object> 转换为 String[]【英文标题】:Convert List<Object> to String[] in Java 【发布时间】:2013-01-24 06:14:14 【问题描述】:

我需要从List&lt;Object&gt; 转换为String[]

我做了:

List<Object> lst ...
String arr = lst.toString();

但我得到了这个字符串:

["...", "...", "..."]

只是一个字符串,但我需要String[]

非常感谢。

【问题讨论】:

如何将随机的Object转成String? toString (在大多数类中)纯粹用于诊断消息,而不是“生产”。 我想转换 String[] 中的所有列表而不对其进行迭代。 你看过 List 的规范了吗? (我猜不是,否则你会注意到 toArray。) Java 8 : ***.com/a/31002358/1216775 【参考方案1】:

您必须遍历列表并填写您的String[]

String[] array = new String[lst.size()];
int index = 0;
for (Object value : lst) 
  array[index] = (String) value;
  index++;

如果列表是String 值,List 那么这就像调用lst.toArray(new String[0]) 一样简单;

【讨论】:

array[index] = (String) value 更改为 array[index] = String.valueOf( value )。如果列表包含任何内容,但字符串除外,那么答案将崩溃。也许这就是 OP 想要的。【参考方案2】:

您可以使用 toArray() 转换为对象数组,然后使用this method 将对象数组转换为字符串数组:

Object[] objectArray = lst.toArray();
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);

【讨论】:

objectArray仍然可以用作String[]时,为什么要额外的数组复制? 查看链接问题的底部 - 将 objectArray 转换为 String[] 会导致 ClassCastException。这个答案解释得更好:***.com/a/1018774/1063716 是的,如果列表包含字符串以外的对象。但即使在您的代码中也会发生这种情况。 List&lt;Object&gt; lst = new ArrayList&lt;Object&gt;(); lst.add(1); 这个测试用例我得到 ArrayStoreException。【参考方案3】:

Java 8 可以选择使用以下流:

List<Object> lst = new ArrayList<>();
String[] strings = lst.stream().toArray(String[]::new);

【讨论】:

【参考方案4】:

如果我们非常确定List&lt;Object&gt; 将包含String 的集合,那么不妨试试这个。

List<Object> lst = new ArrayList<Object>();
lst.add("sample");
lst.add("simple");
String[] arr = lst.toArray(new String[] );
System.out.println(Arrays.deepToString(arr));

【讨论】:

【参考方案5】:

这里有很多有用的概念:

List<Object> list = new ArrayList<Object>(Arrays.asList(new String[]"Java","is","cool"));
String[] a = new String[list.size()];
list.toArray(a);

打印字符串数组的提示:

System.out.println(Arrays.toString(a));

【讨论】:

【参考方案6】:

使用Guava

List<Object> lst ...    
List<String> ls = Lists.transform(lst, Functions.toStringFunction());

【讨论】:

【参考方案7】:

在 Kotlin 中有一个简单的方法

var lst: List<Object> = ...
    
listOFStrings: ArrayList<String> = (lst!!.map  it.name )

【讨论】:

以上是关于Java List<Object> 根据Object中channelTime字段从小到大排序,并输出最终的List<Object>的主要内容,如果未能解决你的问题,请参考以下文章

java list<object>如何去重

把java两个list <object>集合 放到第三个list<object>集合中去

JAVA关于list object

java 从数据库中返回来的数据list<Map<String ,Object>> 做拼接处理

在 Java 中将 List<Object> 转换为 String[]

java-List<实体>怎么转换成List<Object>