Linq к SQL С Полями Базы данных XML — Почему это работает?

Я чувствую, что это намного больше похоже на алгоритм, давайте пойдем шаг за шагом

1) Сначала получим все подсписки, исключив первое целое число в каждой итерации

List<Integer> list=Arrays.asList(640,480,520,170,320,140,60);

    List<List<Integer>> re = IntStream.range(0, list.size())
                                      .mapToObj(sb->list.subList(sb, list.size()))
                                      .filter(s->s.size()>1)
                                      .collect(Collectors.toList());

    re.forEach(ls->System.out.println(ls));

Выходные данные

[640, 480, 520, 170, 320, 140, 60]
[480, 520, 170, 320, 140, 60]
[520, 170, 320, 140, 60]
[170, 320, 140, 60]
[320, 140, 60]
[140, 60]

2) Теперь в каждом списке есть сумма

List<List<Integer>> re1 = re.stream()
                            .map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
                            .collect(Collectors.toList());

 re1.forEach(ls->System.out.println(ls));

Выходные данные

[1120, 1640, 1810, 2130, 2270, 2330]
[1000, 1170, 1490, 1630, 1690]
[690, 1010, 1150, 1210]
[490, 630, 690]
[460, 520]
[200]

Комбинированное решение шага 1 и шага 2

List<List<Integer>> re = IntStream.range(0, list.size())
                                      .mapToObj(sb->list.subList(sb, list.size()))
                                      .filter(s->s.size()>1)
                                      .map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
                                      .collect(Collectors.toList());
10
задан jerhinesmith 27 March 2009 в 15:19
поделиться

1 ответ

Когда Вы делаете это новым XElement, Вы делаете другой объект. Возможно, что для обнаружения "переутомления" это использует ссылочное равенство, которое, очевидно, рассматривало бы это как новое значение.

В какой точке Вы на самом деле вносите изменения в элемент? Я ожидал бы, что LINQ к SQL будет иметь кэшируемую копию исходного значения и затем сравнит это с новым значением. Если это сделает ту "кэшируемую копию", просто копируя ссылку, то независимо от того, что Вы делаете к тому объекту, он будет всегда думать, что эти два равны. Если вместо этого Вы создадите новый элемент и затем измените это, то старый объект будет все еще иметь старое значение, таким образом, сравнение поймет внесение изменений. Это имеет смысл?

10
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: