当前位置: 首页 > 知识库问答 >
问题:

Java从集合中选择某些值

丁茂
2023-03-14

我正在读取一个CSV文件,其中包含有关山丘的数据。我可以从文件中读取数据,并将列标题与6个字段相关联。当前我的输出打印如下:

### County:Argyll and Bute
[48,Deinn a'Choin,Argyll and Bute,768.2,56.281081,-4.659943, 49,Feinn a'Choin,Argyll and Bute,768.5,56.281043,-4.659924, 50,Zeinn a'Choin,Argyll and Bute,768.7,56.281034,-4.659981]
### County:Stirling
[19,Beinn Each,Stirling,813.0,56.313957,-4.262199, 11,Creag Gharbh,Stirling,637.4,56.46677,-4.221506, 7,Meall Buidhe,Stirling,719.0,56.419004,-4.308645]
### County:Aberdeen
    [19,Beinn Each,Aberdeen,813.0,56.313957,-4.262199, 11,Creag Gharbh,Aberdeen,637.4,56.46677,-4.221506, 7,Meall Buidhe,Aberdeen,719.0,56.419004,-4.308645]

但我试图获得如下输出:

### County:Argyll and Bute
NameOfHill#1 Height
NameOfHill#2 Height
NameOfHill#3 Height
### County:Stirling
NameOfHill#1 Height
NameOfHill#2 Height
NameOfHill#3 Height
### County:Aberdeen
NameOfHill#1 Height
NameOfHill#2 Height
NameOfHill#3 Height

因此,从技术上讲,我试图实现的是,从我的集合中选择3个值,它们实际上在地图中,并且只打印出名称和高度。

我的当前代码是:

    for (int i = 0; i < 3; i++) {
        System.out.println("### County:" + hillsByCounty.keySet().toArray()[i]);
        System.out.println(hillsByCounty.get((hillsByCounty.keySet().toArray())[i]));
    }
}

我认为我必须使用另一个for循环,并从集合中选择3个值,然后在最后的print语句中使用“.getName”和“.getHeight”

我有个大致的想法

            Set<Hill> getHills = hillsByCounty.get((hillsByCounty.keySet().toArray())[i]);
            for (int j = 0 ; j < 3 ; j++){
                        //write to somehow code to pull the hill in pos j in this set
                        System.out.println(h.getName() + " " + h.getHeight());
             }
        }
    }

但我不确定的是,如何获得这些设定值。我的映射值是一个集合,因为我以前的方法初始化如下:

public static Map<String, Set<Hill>> hillsByCounty(List<Hill> hills) {

共有2个答案

松成和
2023-03-14

看起来您需要了解增强的for循环,也称为for-each循环。

您的代码应为:

int countyCount = 0;
for (Map.Entry<String, Set<Hill>> entry : hillsByCounty(readHills()).entrySet()) {
    System.out.println("### County:" + entry.getKey());
    int hillCount = 0;
    for (Hill hill : entry.getValue()) {
        System.out.println(hill.getName() + " " + hill.getHeight());
        if (++hillCount == 3)
            break;
    }
    if (++countyCount == 5)
        break;
}

在Java 8中,您还可以使用流媒体:

hillsByCounty(readHills()).entrySet()
                          .stream()
                          .limit(5)
                          .forEach(entry -> {
    System.out.println("### County:" + entry.getKey());
    entry.getValue()
         .stream()
         .limit(3)
         .map(h -> h.getName() + " " + h.getHeight())
         .forEach(System.out::println);
});

请参阅:Javadoc-Map。entrySet()
Java™ 教程-for语句StackOverflow-Java中增强的for循环的语法是什么
StackOverflow-为什么循环效率比循环效率高?

章城
2023-03-14

集合没有get方法。您可以将其包装在一个列表中,例如。

List<Hill> hills = new ArrayList<>(hillsByCounty.get((hillsByCounty.keySet().toArray())[i]));

或者使用for each循环。如果只需要打印前3个,可以添加计数器来处理。

int i = 0;
for (Hill h : hills) {
    //Can print here with h however you like
    if (++i == 3) {
        break;
    }
}
 类似资料:
  • 问题内容: 我有一个如下的Excel文件, 我想将上述详细信息保存一些,以便我可以访问 我尝试过这样的事情,只能存储 上面的代码显示以下内容: 请帮助我做到这一点。 问题答案: 您应该使用面向对象的方法来创建实体。创建一个代表您的excel数据行的类,假设它称为Records,然后将该类的对象放在以用户名作为键的Hashmap中。这是示例类: 定义一个集合以将记录存储为 读取excel文件,为每行

  • 问题内容: 如何从集合中选择随机元素?我对从Java中的HashSet或LinkedHashSet中选择随机元素特别感兴趣。也欢迎使用其他语言的解决方案。 问题答案:

  • 这是我的密码: 它返回表中所有列的数组。但我不需要把所有的专栏都写下来。我只需要返回以下列:。我对此进行了搜索并找到了答案:(使用函数) 但它并没有返回预期的结果。它返回以下内容: 如您所见,没有和列。我怎样才能修好它?

  • 问题内容: 如何使用水豚来检查选择框是否列出了某些值作为选项?它必须与selenium兼容… 这是我拥有的HTML: 这是我想做的: 问题答案: 尝试使用capybara rspec匹配器have_select(locator,options = {}) 代替:

  • 我对任何逻辑都不熟悉,正在尝试构建一个基于代理的模型,该模型随机地将代理(车辆)从起点(地理信息系统地图上的家庭位置点)引导到选定的位置。我有6组不同的集合,其中存储了不同的位置(学校集合、超市集合、购物中心集合、医院集合、旅游集合和工作办公室集合)。 在我的车辆状态图中,我指示它访问4个位置。到目前为止,我只能在每次转换中使用:moveTo(随机来自(主。医院集合))使代理移动到其中一个集合中的

  • 我已经为我的应用程序实现了shedlock,对于我们拥有的两台服务器来说,它运行良好,没有任何问题。 我们现在在另一个域上添加了两个新服务器,shedlock也会选择它们。(好吧,这就是它的本意) 我有一份工作,创建pdf文件并将其放在文件夹中。添加的新服务器无权访问这些文件夹。因此,当这两个新服务器选择作业时,我的作业将失败。 有没有可能告诉夏洛克从我的两台服务器中选择任何一台,或者不选择另外两