考虑到TreeMap是一个排序的地图,那么您可以这样做:
//properties as they are:
System.out.println(System.getProperties());
//now sorted:
TreeMap<Object, Object> sorted = new TreeMap<>(System.getProperties());
System.out.println(sorted);
请使用此示例:
从链接: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();
}
}
您可以找到一个不需要对属性进行子分类并使用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过滤器仅支持