当前位置:  开发笔记 > 编程语言 > 正文

从List <Object> Java中获取一些值

如何解决《从List<Object>Java中获取一些值》经验,为你挑选了1个好方法。

我认为这很简单,但我需要一种方法来轻松解决它.

我的问题是:我有列表对象学生包含100个对象

public class Student {

private String id;
private String name;
private int age;


public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

现在,我只想让一些学生的年龄有名"ABC","BCD","DEF"

所以我会这样做:

Map data = new HashMap<>();
    List listSpecification = new ArrayList<>(Arrays.asList("ABC", "BCD", "DEF"));
    for (Student stu : list) {
        for (int i = 0; i < listSpecification.size(); i++) {
            if (stu.getName().equalsIgnoreCase(listSpecification.get(i))) {
                data.put(pro.getName(), pro.getValue());
            }
        }
    }

但如果我这样做,我认为它对性能不好.所以任何人都可以帮我另一个案子?



1> Ted Hopp..:

您的算法具有复杂度O(m*n),其中m是学生数,n是名称数.使用流API的建议或Collection.contains不会改变.

您可以使用学生姓名中的地图将其转换为O(m + n)算法Student:

Map studentsByName = new HashMap<>();
for (Student s : studentList) {
    studentsByName.put(s.getName().toLowerCase(), s);
}

这是O(m)操作.然后,您可以遍历规范列表中的所有名称,将每个名称转换为小写,并直接拉出每个学生.这是O(n)操作.如果您需要为同一学生列表处理多个规范列表,则需要进行一次第一步,这样可以进一步提高效率.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有