52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

Как можно упростить код при преобразовании вложенных типов (коллекции)

27.05.2018, 12:59. Показов 745. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код сервлета.
Он описывает историю запросов от пользователя.
Данная история записывается в коллекцию.

В итоге получается вот так:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Текущий массив чисел:
[186]
 
История массивов:
[110]
[350]
[429, 165, 836, 598, 44, 268, 909, 329, 178, 171, 690, 894, 903, 904, 969, 457, 936, 64, 122]
[186]
 
 
История доступа:
Sun May 27 12:52:02 MSK 2018 - 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1
Sun May 27 12:52:04 MSK 2018 - 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1
Sun May 27 12:52:06 MSK 2018 - 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1
Sun May 27 12:52:07 MSK 2018 - 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1
 
 
Попробовать еще


А вот сервлет:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package servlets;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
@WebServlet("/second.html")
public class SecondServlet extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
 
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8"); //установили кодировку для ответа
        response.setContentType("text/html"); // MIME-тип html-страницы, для ответа
 
        PrintWriter out = response.getWriter();
 
        /*получаем атрибут, который содержит массив значений,
         сформированный в текущем запросе*/
        Object arrayAttr = request.getAttribute("array_data");
 
        List<Integer> valuesArray = (List<Integer>) arrayAttr;//преобразуем полученный массив в объект.
 
        out.println("<h1>Текущий массив чисел:</h1>");
        out.println(valuesArray.toString());//распечатываем значения объектов коллекции
 
        out.println("<br />");
        out.println("<br />");
        out.println("<h1>История массивов:</h1>");
 
        HttpSession session = request.getSession(); //получаем объект текущей сессии
 
 
 
        List<List<Integer>> arrayHistory;
        arrayHistory = (List<List<Integer>>)session.getAttribute("array_history");
 
 
        /*разбираем коллекцию массивов и выводим на печать каждый элемент данной коллекци
        * Элемент в данной коллекции содержит массив целых значений*/
        for (List<Integer> array : arrayHistory) {
            out.println("<li>");
            out.println(array.toString());
            out.println("</li>");
        }
 
        out.println("<br />");
        out.println("<br />");
        out.println("<h1>История доступа:</h1>");
 
        ServletContext context = request.getServletContext();//получаем контекст веб-приложения
 
        List<String> accessHistory;
        accessHistory = (List<String>)context.getAttribute("access_history");
        /*Разбираем коллекцию историии доступа к веб-прилежени.*/
        for (String access : accessHistory) {
            out.println("<li>");
            out.println(access);
            out.println("</li>");
        }
 
        out.println("<br />");
        out.println("<br />");
        out.println("<a href='first.html'>Попробовать еще</a>"); //указали ссылку на вызов серлета №1
    }
}



Когда мы достаем карту атрибутов из request, то данные имеют тип Object и нужно преобразованию в нужный нам тип данных.

Но как можно упростить написание данной строчки

Java
1
2
        List<List<Integer>> arrayHistory;
        arrayHistory = (List<List<Integer>>)session.getAttribute("array_history");

Как от этого избавится?

Java
1
List<List<Integer>>
Можно ли разложить это на несколько строк, более понятных ?
В данном случае в карте атрибутов , в атрибуте "array_history", хранится массив коллекций, то есть каждая запись
в данном массиве -
Это коллекция с типом данных List<Integer>.

Соответственно данный массив помещается в отдельную коллекцию List, у которой тип данных List<List<Integer>>.
Может ли кто объяснить такую схему и можно ли преобразование типов попроще расписать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2018, 12:59
Ответы с готовыми решениями:

Как вывести число в Label (проблема при преобразовании типов)
Ребят я вообще немогу понять почему все так через одно место,мне очень не привычно. Я когда знакомился с C# все было намного проще. вот...

Есть select и при нажатии на кнопку загружается определенный html файл. Как можно упростить код?
Есть select и при нажатии на кнопку загружается определенный html файл. Как можно упростить код,чтобы не писать условия под каждую...

Ошибка при преобразовании типов
Добрый день! В программе требуется считать данные типа char из поля Edit, а затем перевести в тип byte. Вот кусок кода: ...

2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.05.2018, 13:40
Цитата Сообщение от masli Посмотреть сообщение
попроще
Пиши в БД
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
27.05.2018, 19:40  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Пиши в БД
Тогда пожалуйста переместите мою тему в Базы данных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2018, 19:40
Помогаю со студенческими работами здесь

Потеря точности при преобразовании типов
Дан фрагмент кода: double a = Convert.ToDouble(Console.ReadLine()); double b = Math.Truncate(a); int c =...

Странное поведение при преобразовании типов
Доброго времени суток! Помогал товарищу написать простенькую программу. Задача состояла в том, чтобы при введенном дробном числе...

Ошибка при преобразовании типов Integer и String
Выполняла задание с помощью JavaFX: сложить многочлены заданной степени, используя TextField и HashMap. Алгоритм программы удалось создать,...

Изменение значения указателя при преобразовании типов
Есть класс Child, унаследованный от класса Parent. Наследование обычное, а не множественное. И Parent, и Child имеют виртуальные функции....

Почему конструктор вызывается повторно при преобразовании типов?
В качестве примера предлагаю рассмотреть примерчик из учебника. В примере мы создаём класс, содержащий в качестве поля строку символов и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru