new-麻烦大伙帮忙用Collections.sort 排序一下 这个自定义的属性

问题描述

麻烦大伙帮忙用Collections.sort 排序一下 这个自定义的属性

List glass = new ArrayList(glassesRefractionCollections);
Collections.sort(glass, new Comparator() {
@Override
public int compare(R g1, R g2) {

                return   //请看底下的排列顺序

        }
    });

要按照这个顺序排序

cycloplegic, manual, refracting station, autorefraction, retinoscopy

请问怎么实现啊。。。上面那个顺序一点规律都没有。。。

解决方案

wc,这个是脑筋急转弯的题目,从目前的趋势来看,貌似是逆转字符串排序

public int compare(R g1, R g2) {
StringBuilder sb1 = new StringBuilder( (String)g1);
StringBuilder sb2 = new StringBuilder( (String)g2);
return sb1.reverse().toString().compareTo(sb2.reverse().toString());
}

解决方案二:

先将字符串反转,再进行比较。

 public static void main(String[] args) {
        String str = "abc????????";
        char[] c = str.toCharArray();
        sort(c);
        String out = new String(c);
        System.out.println(str);
        System.out.println(out);
    }

    private static void sort(char[] c) {
        int start = -1; // 需要反转部分的起始下标 不需要反转时设为-1
        boolean flag = false; // 是否是阿拉伯语字符的标志
        for (int i = 0; i < c.length; i++) {
            flag = isArabic(c[i]); // 判断当前字符是否是阿拉伯语字符
            if (start != -1 && !flag) { // 如果之前已经检测到了阿拉伯语字符 且当前字符不是阿拉伯语字符;
                reverse(c, start, i);
                start = -1;
            }
            if (start == -1 && flag) { // 如果之前未检测到阿拉伯语字符 且当前字符是阿拉伯语字符
                start = i;
            }

        }
        if (start != -1) {
            reverse(c, start, c.length);
            start = -1;
        }
    }

    /**
     * 将字符数组的指定部分反转
     *
     * @param c 需要反转的字符串数组
     * @param start 需要反转部分的起始下标
     * @param end 需要反转部分的结束下标
     */
    private static void reverse(char[] in, int start, int end) {
        System.out.println("Do reverse between " + start + " , " + end);
        int n = (end - start) / 2; // 计算交换次数
        for (int i = 0; i < n; i++) { // 交换
            char t = in[start + i];
            in[start + i] = in[end - i - 1];
            in[end - i - 1] = t;
        }
    }

    /**
     * 判断输入的字符是否是阿拉伯字符
     *
     * @param c 输入的字符
     * @return 是阿拉伯字符返回true 不是返回false
     */
    private static boolean isArabic(char c) {
        int u = c;
        if (0x0600 <= u && 0x06FF >= u) { // 如果是Unicode码表 阿拉伯文 0600-06FF区间
            return true;
        }
        if (0x0750 <= u && 0X077F >= u) { // 如果是Unicode码表 阿拉伯文补充 0750-077F区间
            return true;
        }
        return false;
    }
时间: 2024-12-22 03:04:42

new-麻烦大伙帮忙用Collections.sort 排序一下 这个自定义的属性的相关文章

for-有个 关于 Collections.sort 排序的问题 请教大神门哈

问题描述 有个 关于 Collections.sort 排序的问题 请教大神门哈 for (RefractionCollection collection : refractionCollections) { List<RefractionCollection> list2 = new ArrayList<RefractionCollection>(); list2.add(collection); Collections.sort(list2); } 假设现在 这个list 2

java中Collections.sort排序函数用法详解_java

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

new person-简单的Collections.sort 方法。 大伙看下,帮忙补充一下 这个方法好么。。

问题描述 简单的Collections.sort 方法. 大伙看下,帮忙补充一下 这个方法好么.. import java.util.ArrayList; import java.util.Collections; public class StringSorting { public static void main(String[] args) { ArrayList persons = new ArrayList(); persons.add(new Person("Sam"))

用Java集合中的Collections.sort方法如何对list排序(两种方法)_java

第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class User implements Comparable <user> { private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } publi

Collections.sort()对HashMap里的键值对按照键进行排序

MainActivity如下: package cn.testhashmapsort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.app.Act

安卓开发之Collections.sort方法对list按时间排序

compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序. 一直都没有接触排序,突然要实现对List的排序,找了一下资料

新人问一个c语言问题,麻烦各位帮忙看一下

问题描述 新人问一个c语言问题,麻烦各位帮忙看一下 一个小型成绩管理系统:#include #include #define N 40int Readscore(int score[]long id[]);int Linsearch(long id[]long mint n);void Linsort(int score[]long id[]int n);void Selectsort(int score[]long id[]int n);int Binsearch(long id[]long

Collections.sort的源码问题

问题描述 Collections.sort的源码问题 public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); //AAA for (int j=0; j<a.length; j++) { i.

Redis SORT排序命令使用方法详解

  对于Redis SORT排序命令 我相信大家都不怎么了解了,因此小编整理了一些Redis SORT排序命令使用方法与例子,希望例子可以对各位玩家带来帮助哦. Redis SORT是由Redis提供的一个排序命令.集合中的标签是无序的,可以使用SORT排序.如: redis>SADD jihe 5 (integer) 1 redis>SADD jihe 1 (integer) 1 redis>SADD jihe 2 (integer) 1 redis>SADD jihe 8 (i