Совместимость Java и Kotlin, управление данными с помощью Koltin Lambda?

#java #sqlite #kotlin #arraylist

#java #sqlite #kotlin #arraylist

Вопрос:

Итак, по сути, я использую java для получения информации, а затем использую Kotlin для управления информацией. Итак, что я сделал до сих пор, я сохранил свою информацию в ArrayList, вызываемом tableData на java, я сохраняю все свои элементы в этом списке (я должен был использовать лучшее имя здесь), а затем вернул список. Мой java-код:

 public static ArrayList<String> readAllData () {
    //Connecting to database
    Connection con = DbConnection.connect();
    //Preparing statement
    PreparedStatement ps = null;
    //result set declaration
    ResultSet rs = null;
    //tableData String array
    ArrayList<String> tableData = new ArrayList<String>();
        try {
            //Database initialization
            String sql = "SELECT * FROM ProjectInfo";
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                //for each iteration store the data into variable a from column projectName
                String a = rs.getString("projectName");
                //print out each element
                //System.out.println("a = "   a);
                tableData.add(a);
            }
            //other catch exceptions
        } catch (SQLException e) {
            System.out.println(e.toString());
        } finally {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e){
                System.out.println(e.toString());
            }
        }
    //System.out.println(tableData);
        //return all the data that has been stored into this array
        return tableData;
    }
  

В Kotlin я создал вызываемый класс свойств GettingData и передал один параметр projectName: ArrayList<String> . Затем я перешел к фактической распечатке данных

 class GettingData(var projectName: ArrayList<String>) {
}

fun ManageData() {

    var arrayData = listOf<GettingData>(GettingData(DbConnection.readAllData()))
    var projectNameData = arrayData.map {it.projectName}

    for (projectName in projectNameData) {
        println(projectName)
    }

}
  

Все мои элементы распечатаны, однако я не могу использовать функции фильтра для вызова определенных элементов из ArrayList? Я хочу иметь возможность вызывать каждый элемент и распечатывать их в алфавитном порядке? Я пробовал filter, sortedWith and find функции, но, похоже, не могу заставить их работать. Как я могу этого добиться?

Ответ №1:

Я думаю, ваш вопрос сводится к желанию распечатать список строк в алфавитном порядке.

Вы можете использовать sorted() функцию:

 for (projectName in projectNameData.sorted()) {
    println(projectName)
}
  

Комментарии:

1. Пробовал это, но это просто выдает мне ошибку и говорит мне создать функции расширения в контекстных действиях, в которых я не слишком уверен?

2. Хорошо, тогда я не думаю, что ваш вопрос подлежит ответу в его нынешнем виде. Пожалуйста, постарайтесь свести его к минимально воспроизводимому требуемому коду и включите желаемое поведение и любые сообщения об ошибках, которые вы получаете. Например, весь раздел Java не имеет отношения к вопросу. Приведенный выше код работает для меня и выводит отсортированный список, поэтому в вашем случае должно быть что-то еще.

3. Это сработало! Я понял, что многие элементы в моей базе данных, где осталось null или empty, это вызывало проблему. Теперь это работает!