如何使用TreeSet作为值初始化HashMap?

时间:2015-06-02 16:07:57

标签: java hashmap treeset

我正在尝试使用字符串作为键来创建HashMap,并使用自定义比较器(CandidateComparator)作为值进行排序。

HashMap<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>(new CandidateComparator())>();

我看不出我做错了什么。我在使用这个网站:

http://www.java2novice.com/java-collections-and-util/treeset/sort-by-objects/

作为参考。

此语句产生两个语法错误:

1。插入'&gt;'完成ReferenceType1;

2。此标记之后的预期表达式'(' - 指的是最后一个'(声明的'。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

应该以这种方式初始化HashMap:

library test_utils.test_script_dir;

import 'dart:io';
import 'package:path/path.dart';

// temp workaround using test package
String get testScriptDir {
  String scriptFilePath = Platform.script.toFilePath();
  print(scriptFilePath);
  if (scriptFilePath.endsWith("runInIsolate.dart")) {

    // Let's look for this line:
    // import "file:///path_to_my_test/test_test.dart" as test;

    String importLineBegin = 'import "file://';
    String importLineEnd = '" as test;';
    int importLineBeginLength = importLineBegin.length;

    String scriptContent = new File.fromUri(Platform.script).readAsStringSync();

    int beginIndex = scriptContent.indexOf(importLineBegin);
    if (beginIndex > -1) {
      int endIndex = scriptContent.indexOf(importLineEnd, beginIndex + importLineBeginLength);
      if (endIndex > -1) {
        scriptFilePath = scriptContent.substring(beginIndex + importLineBegin.length, endIndex);
      }
    }
  }
  return dirname(scriptFilePath);
}

HashMap本身不需要比较器。您需要HashMap<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>>(); 的实例来填充TreeSet,并且每个实例都需要一个比较器。

HashMap

答案 1 :(得分:0)

Comparator是指TreeSet,而不是HashMap。此外,Comparator不是TreeSet的类型定义的一部分(例如,TreeSet<Candidate>) - 它只在创建新实例时传递。

所以,简而言之 - 从定义中删除它并在构造对象时传递它:

Map<String, TreeSet<Candidate>> map = new HashMap<String, TreeSet<Candidate>>();

map.put ("SomeString", new TreeSet<Candidate>(new CandidateComparator()));