列出共享相同属性的对象[重复]

Posted

技术标签:

【中文标题】列出共享相同属性的对象[重复]【英文标题】:Listing Objects that share the same attribute [duplicate] 【发布时间】:2017-03-31 16:33:41 【问题描述】:

好的,所以基本上我正在尝试遍历我的对象中的

private ArrayList<Temperatures> recordedTemperature;

并显示共享相同“位置”的每个人。位置是在 Temperatures 类的构造函数中初始化的 int 变量:

public Temperatures(int location, int day, double temperature)

    this.location = location;
    this.day = day;
    this.temperature = temperature;

如何遍历 Temperatures ArrayList 中的所有对象并找出具有匹配位置属性的对象并返回它们?

【问题讨论】:

流对你来说可能太复杂了,但是使用 for 循环和 if 语句。一旦你了解了基础知识就非常简单 更容易关注帖子:***.com/questions/34506218/… 是的,我认为它必须是一个 for 循环或类似的东西。但我的意思是我将如何使用 int 来做到这一点?我有点困惑,因为对于字符串我会使用 if.contains(searchString),但我不确定如何使用 ints 来实现 您没有字符串或整数列表,您有 Temperatures 对象。你必须做contains(someTemperature),但这需要比这里需要更多的代码 【参考方案1】:

您可以使用 Java 8 和流。

要过滤List,请使用filter

List<Temperature> filtered = recordedTemperature.stream().filter(t -> t.getLocation() == 1).collect(Collectors.toList());

要按位置分组,请使用 collect 和 groupingBy

Map<Integer, List<Temperature>> grouped = recordedTemperature.stream().collect(Collectors.groupingBy(Temperature::getLocation));

您将获得Map,其中键是您的位置,值是具有给定位置的Temperature 列表。

【讨论】:

【参考方案2】:

您需要遍历您的列表并根据您的标准验证列表中的每个项目。在您的情况下,需要传递列表并识别所有唯一位置(例如将它们放在地图中)并为每个位置添加具有该位置的条目列表。

Map<Integer, List<Temperatures>> tempsByLocation = new HashMap<>();
for (Temperatures t : recordedTemperature) 
//1 check that there is such location
//2 if there is already, then append your location to the list at that location
//3 otherwise create the new key (new location) and add the new list containing only your temperature to it

【讨论】:

【参考方案3】:

你可以试试:

Map<Integer, ArrayList<Temperatures>> map = new HashMap<Integer, ArrayList<Temperatures>>(); //create a map, for all location => array of Temperatures objects with this location
for(Temperatures t: recordedTemperatures)
    if(map.get(t.location)==null)
        map.put(t.location, []); // if it is first Temperatures object with that location, add a new array for this location
    
    map.put(t.location, map.get(t.location).push(t)); // get the Temperatures with this location and append the new Temperatures object

然后遍历这些地图以获取所有组:

for (Map.Entry<Integer, ArrayList<Temperatures>>> entry : map.entrySet())

    // entry.getKey() is the location
    // entry.getValue() is the array of Temperatures objects with this location

请注意,我没有实施和尝试这个,但它可能会起作用或给你一个想法。

【讨论】:

【参考方案4】:

如果您尝试根据给定的 location 获取所有 temperatures,您可以在 Java 8 中执行类似的操作:

public List<Temperatures> getTemperaturesFromLocation(List<Temperatures> temperatures, int location) 
    return temperatures
           .stream()
           .filter(t -> 
               t.getLocation() == location
           )
           .collect(Collectors.toList());

或使用常规循环/if 语句:

public List<Temperatures> getTemperaturesFromLocation(List<Temperatures> temperatures, int location) 
    List<Temperatures> toReturn = new ArrayList<>();
    for(Temperatures temperature : temperatures) 
        if(temperature.getLocation() == location) 
            toReturn.add(temperature);
        
    

    return toReturn;

【讨论】:

以上是关于列出共享相同属性的对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Qt:无法从 javascript 调用共享对象方法/属性

将不同的数据类型存储在相同的共享首选项中[重复]

shmat()为不同的程序返回不同的地址,所有程序都具有相同的共享内存[重复]

Rails:在模型之间共享枚举声明值

无法在 Python 中加载共享对象文件 [重复]

将函数指针保存在共享内存中