首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >号码分组逻辑

号码分组逻辑
EN

Stack Overflow用户
提问于 2011-04-29 18:43:05
回答 3查看 727关注 0票数 0

我在不同的A,B和C组中有1 -10个。A-1、A-2、A-3、B-4、C-5、B-6、A-7、C-8、A-9、A、10

我想分成A、B、C三组

代码语言:javascript
复制
A
1-3,
7,
9-10

B
4,
6

C
5,
8

有没有人能帮我学逻辑?

EN

回答 3

Stack Overflow用户

发布于 2011-04-29 19:01:44

这里有一些东西可以让你入门:

代码语言:javascript
复制
String[] items = new String[] {
  "A-1", "B-2", "A-5"
}

// This is the data structure that will receive the final data. The map key is the 
// group name (e.g. "A" for item "A-15") and the map value is a list of numbers that
// have been found for that group. TreeMap is chosen because the groups will be sorted
// alphabetically. If you don't need that, you could also use HashMap.
Map<String, List<Integer>> groups = new TreeMap<String, List<Integer>>();

for (String item : items) {
  // Split the item into the group and the number
  String group = item.substring(0, 1);
  String number = Integer.toString(item.substring(2));

  // See if this group is already registered in our Map
  List<Integer> groupData = groups.get(group);
  if (groupData==null) {
    groupData = new List<Integer>();
    groups.put(group, groupData);
  }

  // Add the number to the data
  groupData.add(number);
}

我在这里假设您的项目始终采用1字母破折号的形式。如果它比这复杂一点,你会想看看正则表达式(参见java类模式)。这是未测试的,我让您测试它并处理特殊情况。

此函数将为{ "A-1", "A-2", "A-3", "B-2", "A-5" }输出

代码语言:javascript
复制
A -> {1, 2, 3, 5}
B -> {2}

如果您想合并连续的数字,则需要处理生成的数字列表,但如果您仔细考虑一下,应该不会太困难。

票数 0
EN

Stack Overflow用户

发布于 2011-04-29 19:04:24

Guava将帮助您创建所需的数据结构:

代码语言:javascript
复制
public static void main(final String[] args) {
    String input = "A-1,A-2,A-3,B-4,C-5,B-6,A-7,C-8,A-9,A-10";

    // create multimap
    Map<String, Collection<Integer>> map=Maps.newTreeMap();
    SortedSetMultimap<String, Integer> multimap = Multimaps.newSortedSetMultimap(
        map, new Supplier<SortedSet<Integer>>() {
          public SortedSet<Integer> get() {
              return new TreeSet<Integer>();
          }
    });

    //add data
    Splitter entrySplitter = Splitter.on(',');
    Splitter keyValueSplitter = Splitter.on('=');
    for (String entry : entrySplitter.split(input)) {
        Iterator<String> tokens = keyValueSplitter.split(entry).iterator();
        multimap.put(tokens.next(), Integer.valueOf(tokens.next()));
    }

    // read data
    for (Entry<String, Collection<Integer>> entry : map.entrySet()) {
        System.out.println(entry.getKey()+":");
        printMergedValues(entry.getValue());
    }

}

private static void printMergedValues(Collection<Integer> value) {
    // TODO implement this yourself
}

我留给你的唯一一件事就是加入小组

票数 0
EN

Stack Overflow用户

发布于 2011-04-29 20:52:03

我会这样说:

代码语言:javascript
复制
     String[] input = {"A-1","A-2","A-3","B-4","C-5","B-6","A-7","C-8","A-9"};
     Map<String, Set<Integer>> result = new HashMap<String, Set<Integer>>();
     String[] inputSplit;
     String group;
     Integer groupNumber;
     for (String item : input)
     {
         inputSplit = item.split("-");
         group = inputSplit[0];
         groupNumber = Integer.valueOf( inputSplit[1] );
         if ( result.get(group) == null ) { result.put(group, new HashSet<Integer>()); }
         result.get(group).add(groupNumber);
     }

     for (Map.Entry entry : result.entrySet())
     {
         System.out.println( entry.getKey() + ":"  +  entry.getValue() );
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5831017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档