首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按创建顺序对ArrayList<String>进行排序[Android/Java]

按创建顺序对ArrayList<String>进行排序[Android/Java]
EN

Stack Overflow用户
提问于 2018-09-16 05:18:47
回答 1查看 703关注 0票数 0

因此,我正在开发一个应用程序,我有一个按钮,用户可以在其中单击以在数组列表的三个排序集之间循环。我有它的Collections.sort(list)排序的数字和字母顺序的列表,但我试图使它的list是按索引号时间添加排序。

这就是我所拥有的:

代码语言:javascript
复制
public class MainActivity extends Activity 
{
    ArrayList<String> list;
    ArrayAdapter adapter;
    ListView listView;
    public int counter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list = new ArrayList<>();
        listView = findViewById(R.id.listView);
        adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(adapter);
        addEntries();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4)
                {

                }
        });
    }

    public void addEntries(){
        for(int e=0; e<=10; e++){
            list.add(String.valueOf(e));
        }
        adapter.notifyDataSetChanged();
    }

    public void sort(View v){
        counter = counter + 1;
        if(counter == 2){
            counter = 0;
        }
        switch(counter){
            case 0:Collections.sort(list);
            message("0");
            break;

            case 1://code to sort by time/index;
            message("1");
            break;

        }
        adapter.notifyDataSetChanged();
    }

    public void message(String message){
        Toast.makeText(getApplicationContext(),message,Toast.LENGTH_SHORT).show();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-09-16 05:47:38

最新答案

最好在列表中存储一个对象,而不是一个字符串。

代码语言:javascript
复制
class Info {
  String value;
  Long time;
  int index;
}

new ArrayList<Info>()

添加项目时,更新时间戳,并将索引设置为列表长度。

然后按字段排序

代码语言:javascript
复制
list.sort((a,b)-> a.time - b.time )
list.sort((a,b)-> a.value.compareTo(b.value) )
list.sort((a,b)-> a.index - b.index )

您可以使用map函数轻松地获取原始字符串列表。

代码语言:javascript
复制
list.map(it->it.value)

其他问题

  • 添加项目时,您需要重新排序。
  • 上面的lambda有快捷表示法。

较旧的答案

否则,您需要从其他地方获取时间(地图等):

代码语言:javascript
复制
list.sort((a,b)-> getTimeFromSomewhere(a) - getTimeFromSomewhere(b) )

你真的应该复制一份,这样在按索引排序时,你仍然可以保留原始的基于索引的列表:

代码语言:javascript
复制
new ArrayList<String>(list).sort((a,b)-> getTimeFromSomewhere(a) - getTimeFromSomewhere(b) )

要按索引排序,请返回原始列表的副本。

代码语言:javascript
复制
new ArrayList<String>(list)

要按字母顺序排序,请使用默认排序返回原始列表的副本

代码语言:javascript
复制
new ArrayList<String>(list).sort()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52348962

复制
相关文章

相似问题

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