CompareTo / Sorting字符串和整数的2D数组
好的,所以我现在想出如何通过字符串和整数对2d数组进行排序,但是我不知道如何将它们组合起来。
我有一个2d用户数组,每行有一个用户数据。 数据分别是列的字符串或整数,所以如果我有多个比较方法,例如按名称排序或按电话号码排序,我如何实现初始的2d数组,因为如果我将它声明为字符串,我就无法比较按整数,如果我将其声明为整数,我就不能再通过String进行比较。
我现在使用的是基本的2d排序方法。
final Integer[][] data1 = userlistcopy; Arrays.sort(data1, new Comparator() { @Override public int compare(final Integer[] entry1, final Integer[] entry2) { final Integer time1 = entry1[1]; final Integer time2 = entry2[1]; return time2.compareTo(time1); } }); System.out.println("===="); for (final Integer[] s : data1) { System.out.println(s[0] + " " + s[1]); }
要么
final String[][] data1 = userlistcopy; Arrays.sort(data1, new Comparator() { @Override public int compare(final String[] entry1, final String[] entry2) { final String time1 = entry1[3]; final String time2 = entry2[3]; return time2.compareTo(time1); } }); System.out.println("===="); for (final String[] s : data1) { System.out.println(s[0] + " " + s[1]); }
所以如果我在不使编译器不喜欢我的情况下比较不同的变量类型,那么我有什么方法可以转换变量? 或者,当我只比较数组的整数列时,我是否可以将整个compareTo方法声明为Integer(即使涉及到字符串)?
谢谢!
编辑,更多细节:我有一个2D数组,IE
[0] [bob] [3] [joe] [4] [john] [6] [jimmy]
它存储在String [] [] userlistcopy中; 如果我想与String进行compareTo,它将起作用,因为我可以比较userlistcopy [1],即使它们被忽略,也可以将整数视为字符串。 但是,如果我想通过Integer进行比较,我必须将userlistcopy更改为Integer数组,然后它会因为它们是Strings存在而变得怪异,并且我忽略了它将String数据槽空出来的错误。
编辑(计算出来)。
好的,我明白了! 我只是将所有数据转移到一个Object数组中,因为我这样做,我声明了它们各自的String / Int类型,然后我与via对比,并且在实际比较中我只是根据自己的需要将其转换/解析,例如。 。
Arrays.sort(data1, new Comparator() { @Override public int compare(final Object[] entry1, final Object[] entry2) { final Integer time1 = Integer.parseInt(entry1[1].toString()); final Integer time2 = Integer.parseInt(entry2[1].toString()); return time2.compareTo(time1); } });
要么
final Object[][] data1 = datanew; Arrays.sort(data1, new Comparator() { @Override public int compare(final Object[] entry1, final Object[] entry2) { final String time1 = entry1[2].toString(); final String time2 = entry2[2].toString(); return time2.compareTo(time1); } });
谢谢你的帮助!
相当确定您不需要/想要2Darrays。 你想要一个’用户’类型的一维数组
class User{ public int ID; public String name; }
然后使用自定义比较器,就像您已为数组排序一样。
整数解决方案:
Arrays.sort(data1, new Comparator
或字符串
final Object[][] data1 = datanew; Arrays.sort(data1, new Comparator
或日期
public int compare(final Object[] entry1, final Object[] entry2) { try { SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); time1 = sdf.parse(entry1[3].toString()); time2 = sdf.parse(entry2[3].toString()); return time2.compareTo(time1); } catch (ParseException ex) { ex.printStackTrace(); } } });
我可以通过将整个2d数组作为Object来单独比较它们,然后在Object compareTO方法中单独比较它们。 🙂
- ArrayBlockingQueue:并发put和take
- 构建一个对象
- 可选vs抛出exception
- Internet Explorer 8-10中的Selenium WebDriver Windows切换问题
- 在org.apache.catalina.core.JreMemoryLeakPreventionListener中急切调用URLConnection的setDefaultUseCaches(false)的原因是什么
- 使用两个字符串生成唯一标识符
- PreparedStatement,CallableStatement和性能注意事项
- 在Java中连接和使用Cassandra
- 使用命令行参数运行jar文件