Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何改进我的实施有什么建议吗?_Java_Spring_Java Stream - Fatal编程技术网

Java 如何改进我的实施有什么建议吗?

Java 如何改进我的实施有什么建议吗?,java,spring,java-stream,Java,Spring,Java Stream,这是我下面代码的一部分。当我使用for循环(注释掉)时,它可以工作。当我使用这个流时,它有点工作,但在一个我从未预料到的方法上表现糟糕 Spravochnik spr = new Spravochnik(); ResultSetMetaData rsmeta = rs.getMetaData(); List<String> columnNames = new ArrayList<>(); List<Li

这是我下面代码的一部分。当我使用for循环(注释掉)时,它可以工作。当我使用这个流时,它有点工作,但在一个我从未预料到的方法上表现糟糕

        Spravochnik spr = new Spravochnik();
        ResultSetMetaData rsmeta = rs.getMetaData();
        List<String> columnNames = new ArrayList<>();
        List<List<String>> valuesInRows = new ArrayList<List<String>>();
        int columnCount = rsmeta.getColumnCount();

        IntStream.range(0, rsmeta.getColumnCount()).forEach(i -> {
            try {
                columnNames.add(rsmeta.getColumnName(i));
            } catch (SQLException e) {
                e.printStackTrace();
            }
        });

//      for(int column = 1; column <= columnCount; column++){
//          columnNames.add(rsmeta.getColumnName(column));
//      }
Spravochnik spr=新的Spravochnik();
ResultSetMetaData rsmeta=rs.getMetaData();
List columnNames=新建ArrayList();
列表值行=新的ArrayList();
int columnCount=rsmeta.getColumnCount();
IntStream.range(0,rsmeta.getColumnCount()).forEach(i->{
试一试{
add(rsmeta.getColumnName(i));
}捕获(SQLE异常){
e、 printStackTrace();
}
});

//对于(int column=1;column您可以使用
IntStream.range(1,rsmeta.getColumnCount()+1)
,它将为您提供从1开始到总计数的列数。

您必须小心循环或流中包含哪些数字,哪些数字不包含

  • 匹配间隔
    匹配间隔
注意:第一个数字总是包含在内的,因为您从
1
循环,所以您也希望从
1
启动
流:

IntStream.range(1, rsmeta.getColumnCount()).forEach(i -> {
    // ...
});
最后,这里使用
的好处是值得怀疑的。实际上,没有任何好处。我强烈建议在这个用例中坚持使用
for循环

for (int column = 1; column <= columnCount; column++) {
    columnNames.add(rsmeta.getColumnName(column));
}

for(int column=1;column显然在流中,从0开始,而在for循环中,从1开始。在ResultSet中,列从1索引。
IntStream.rangeClosed(1,rsmeta.getColumnCount())
是否可以像那样动态创建columnNames列表,不仅仅是填充?是否可以改进?最好是…
.map(i->rsmeta.getColumnName(i)).collect(Collectors.toList());
。但是,我现在不确定我是否明白你的问题。
列表columnNames=IntStream.rangeClosed(1,rsmeta.getColumnCount()).map(i->rsmeta.getColumnName(i)).collect(Collectors.toList());
说类型不匹配不能从字符串到int…我需要使用getColumnName内的索引…如果这是一个门槛,很抱歉,我刚刚开始学习streams