gpt4 book ai didi

java - 有没有更快的方法从对象集合中提取唯一值?

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:27 25 4
gpt4 key购买 nike

我有一个方法可以从作为员工信息的对象集合中提取值:

public class Employee
{
public String AREA;
public String EMPLOYEE_ID;
public String EMPLOYEE_NAME;
}

我想得到所有不同的区域我做了我认为会更容易的事情,只需检查 ArrayList 是否包含该值,如果不包含该值,则需要 187 毫秒才能完成,:

    long startTime = System.currentTimeMillis();
ArrayList<String> distinct_areas = new ArrayList<String>();
for (int i = 0; i < this.employeeTress.length; i++)
{
if (!distinct_areas.contains(this.employeeTress[i].AREA))
distinct_areas.add(this.employeeTress[i].AREA);
}
String[] unique = new String[distinct_areas.size()];
distinct_areas.toArray(unique);
long endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");

然后我想换一种方式看它是否变得更快,对数组进行排序,然后只检查最后一项,如果它不同,然后添加它,它更快一点,需要 121 毫秒才能完成:

    startTime = System.currentTimeMillis();
String[] vs = new String[this.employeeTress.length];
for (int i = 0; i < this.employeeTress.length; i++)
{
vs[i] = this.employeeTress[i].AREA;
}
Arrays.sort(vs);
ArrayList<String> vsunique = new ArrayList<String>();
vsunique.add(vs[0]);
for (int i = 0; i < vs.length; i++)
{
if (!vsunique.get(vsunique.size()-1).equals(vs[i]))
{
vsunique.add(vs[i]);
}
}
String[] uni = new String[vsunique.size()];
vsunique.toArray(uni);
endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime - startTime) + "ms");

我是 Java 的新手,我想知道一个更好的方法来做到这一点。*注意,此代码应适用于 android gingerbread API LVL 10问候。

最佳答案

如果要获取或统计员工列表中的不同区域,可以使用一组字符串。我正在更改变量名称以符合 Java 标准。你可以在之后得到计数。理想情况下,这些是惰性方法。

命令式代码

public Set<String> areas(final List<Employee> employees) {
Set<String> areas = new HashSet<>();
for(final Employee employee: employees) {
areas.add(employee.getArea());
}
return areas;
}

功能代码(谷歌 Guava )

public Set<String> areas(final List<Employee> employees) {
return Sets.newHashSet(
Lists.transform(employees, new Function<Employee, String>() {
public String apply(Employee e) {
return e.getArea();
}
}));
}

Lambdas(Java 8)

public Set<String> areas(final List<Employee> employees) {
return new HashSet<String>(employees.map(e => e.getArea()));
}

关于java - 有没有更快的方法从对象集合中提取唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com