首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将相关对象的列表转换为一行

将相关对象的列表转换为一行
EN

Stack Overflow用户
提问于 2014-07-17 13:33:38
回答 2查看 72关注 0票数 0

我正在使用Java 1.6,

我有这门课

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class TestDrive
{
    public TestDrive()
    {
        super();
    }

    public static void main( String[] args )
    {
        TestDrive testDrive = new TestDrive();
        List<Preference> prefs = new ArrayList<Preference>();

        Preference pref1 = new Preference();
        pref1.setType( "BREAKFAST" );
        pref1.setCode( "Eggs" );
        prefs.add( pref1 );

        Preference pref2 = new Preference();
        pref2.setType( "SPORTS" );
        pref2.setCode( "Basket" );
        prefs.add( pref2 );

        Preference pref3 = new Preference();
        pref3.setType( "BREAKFAST" );
        pref3.setCode( "Milk" );
        prefs.add( pref3 );

        Preference pref4 = new Preference();
        pref4.setType( "SPORTS" );
        pref4.setCode( "Tennis" );
        prefs.add( pref4 );

        //The list may contains more and more Preference objects of different types not only SPORTS and BREAKFAST





    }

    public static class Preference
    {
        Preference()
        {
            super();
        }

        private String type;
        private String code;


        public void setType( String pType )
        {
            this.type = pType;
        }

        public String getType()
        {
            return type;
        }

        public void setCode( String pCode )
        {
            this.code = pCode;
        }

        public String getCode()
        {
            return code;
        }
    }
}

对相同类型的首选项进行分组的最有效方法是什么,换句话说,我只想要一个print语句来打印这一行。

早餐(鸡蛋,牛奶),运动(篮子,网球),.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-17 13:36:42

您可以使用HashMap,其中keyPreference#type,值是List<Preference>

代码语言:javascript
复制
Map<String, List<Preference>> map = 
    new LinkedHashMap<String, List<TestDrive.Preference>>();
for(Preference e : prefs) {
    List<Preference> list = map.get(e.getType());
    if(list == null) {
        list = new ArrayList<TestDrive.Preference>();
        map.put(e.getType(), list);
    }
    list.add(e);
}

for(Entry<String, List<Preference>> l : map.entrySet()) {
    System.out.println(l.getKey() + " " + l.getValue());
}

在toString之后添加到Preference

代码语言:javascript
复制
@Override
public String toString() {
    return code;
}

输出:

代码语言:javascript
复制
BREAKFAST [Eggs, Milk]
SPORTS [Basket, Tennis]
票数 0
EN

Stack Overflow用户

发布于 2014-07-17 13:37:00

最有效的方法?这取决于你需要什么。

没有任何具体要求的最佳方法?你可以用一个

代码语言:javascript
复制
Map<String,Set<String>> preferencesByType = new HashMap<String,Set<String>>();

for (Preference p : prefs) {
  Set<String> group = preferencesByType.get(p.getType());
  if (group == null) {
    group = new HashSet<String>();
    preferencesByType.put(p.getType(), group);
  }

  group.add(p.getCode());
}

顺便说一下,您应该考虑定义自己的构造函数Preference(String type, String code),而不是使用setter。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24805052

复制
相关文章

相似问题

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