当前位置: 首页 > 知识库问答 >
问题:

java中的属性排序

孙嘉悦
2023-03-14

有没有办法在java中对Properties对象进行排序?

我有一个字符串,用于对属性进行分组,并检查数据是否以映射格式可用。

共有3个答案

齐承运
2023-03-14

考虑到TreeMap是一个排序的地图,那么您可以这样做:

//properties as they are:
System.out.println(System.getProperties());

//now sorted:
TreeMap<Object, Object> sorted = new TreeMap<>(System.getProperties());
System.out.println(sorted);
常温文
2023-03-14

请使用此示例

从链接:http://www.java2s.com/Tutorial/Java/0140__Collections/SortPropertieswhensaving.htm

import java.io.FileOutputStream;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

public class Main{
  public static void main(String[] args) throws Exception {
    SortedProperties sp = new SortedProperties();
    sp.put("B", "value B");
    sp.put("C", "value C");
    sp.put("A", "value A");
    sp.put("D", "value D");
    FileOutputStream fos = new FileOutputStream("sp.props");
    sp.store(fos, "sorted props");
  }

}
class SortedProperties extends Properties {
  public Enumeration keys() {
     Enumeration keysEnum = super.keys();
     Vector<String> keyList = new Vector<String>();
     while(keysEnum.hasMoreElements()){
       keyList.add((String)keysEnum.nextElement());
     }
     Collections.sort(keyList);
     return keyList.elements();
  }

}
秦信瑞
2023-03-14

您可以找到一个不需要对属性进行子分类并使用Java 8/9/10的例子

通过这种方式,属性中的keySet、keys和entrySet方法返回已排序的键。然后方法存储也保存属性文件排序。

这个代码在这里

Properties properties = new Properties() {

private static final long serialVersionUID = 1L;

@Override
public Set<Object> keySet() {
    return Collections.unmodifiableSet(new TreeSet<Object>(super.keySet()));
}

@Override
public Set<Map.Entry<Object, Object>> entrySet() {

    Set<Map.Entry<Object, Object>> set1 = super.entrySet();
    Set<Map.Entry<Object, Object>> set2 = new LinkedHashSet<Map.Entry<Object, Object>>(set1.size());

    Iterator<Map.Entry<Object, Object>> iterator = set1.stream().sorted(new Comparator<Map.Entry<Object, Object>>() {

        @Override
        public int compare(java.util.Map.Entry<Object, Object> o1, java.util.Map.Entry<Object, Object> o2) {
            return o1.getKey().toString().compareTo(o2.getKey().toString());
        }
    }).iterator();

    while (iterator.hasNext())
        set2.add(iterator.next());

    return set2;
}

@Override
public synchronized Enumeration<Object> keys() {
    return Collections.enumeration(new TreeSet<Object>(super.keySet()));
    }
};
 类似资料:
  • 问题内容: 哦,那些带有lambda的棘手的Java 8流。它们非常强大,但是复杂性要花一点点头才能将其包起来。 假设我有一个带有属性的类型。假设我有一个与名称相关联的用户的地图(例如,登录用户名)。让我们进一步说一下,我有一个比较器的实例来对用户名进行排序(也许使用花哨的排序器等)。 那么,如何获取地图中按用户名排序的用户列表?我可以忽略地图键并执行以下操作: 但是我不得不提取名称才能使用的那一

  • 问题内容: 我有一个对象,有时我需要添加其他对象。 我想在此之后进行排序。我不想获取所有键和值,将它们与之排序,然后将其全部放入一个新对象。有没有更好的办法? 问题答案: 不,扩展不能为键或值定义可预测的排序顺序。 您可以尝试将所有值转储到诸如之类的东西中,这将对键施加自然排序。

  • 我有一个对象,有时需要向其添加其他。 我想在此之后对进行排序。我不想获取所有键和值,用对它们进行排序,然后将它们全部放入一个新对象。有更好的办法吗?

  • 你知道为什么在对我的应用程序进行去压缩时,我的地址对象的属性顺序会发生变化吗?我需要检查它存储在数据库中的地址是否等于来自前端的地址。我正在使用对象映射器将对象转换为文本,以便我可以比较2个字符串,但由于这种情况,我总是得到假,因为顺序发生了变化,正如您在下面的图片中看到的那样。

  • 问题内容: 因此,直到最近,我还是故意为自己保留Java n00b,而我的第一次实际接触却引起了轻微的震惊:Java没有C#样式属性! 好吧,我可以接受。但是,我也可以保证已经在一个代码库中看到了Java中的属性获取器/设置器代码,但是我不记得在哪里。那是如何实现的?是否有语言扩展?它与NetBeans有关吗? 问题答案: Java中有一个用于getter和setter的“标准”模式,称为Bean

  • 问题内容: 我正在尝试按属性对一些数据进行排序。这是我tought应该可以工作的示例,但事实并非如此。 HTML部分: JS部分: 结果: A-> AData B-> BData C-> C数据 …恕我直言,应如下所示: C-> C数据 B-> BData A-> AData 我是否错过了某些东西(可以在这里进行JSFiddle的实验)? 问题答案: AngularJS的orderBy过滤器仅支持