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":"退出会议"
]
所以获取一个时间对应的所有区域就可以实现为:
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<Object>
转换为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<Object> lst = new ArrayList<Object>(); lst.add(1);
这个测试用例我得到 ArrayStoreException。【参考方案3】:
Java 8 可以选择使用以下流:
List<Object> lst = new ArrayList<>();
String[] strings = lst.stream().toArray(String[]::new);
【讨论】:
【参考方案4】:如果我们非常确定List<Object>
将包含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>集合 放到第三个list<object>集合中去
java 从数据库中返回来的数据list<Map<String ,Object>> 做拼接处理