Linq: список списков в длинный список

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

27
задан George Stocker 16 March 2009 в 16:59
поделиться

2 ответа

ответ ybo был бы моим первым ответом также. Выражение запроса, эквивалентное из этого:

var query = from a in computeAList()
            from b in a.Alist
            select b.C;

Ради полноты, другие ответы в этом потоке являются вариациями на ту же тему.

От ybo (тот же самый запрос, выраженный как запись через точку):

var query = listOfA.SelectMany(a => a.Alist, (a, b) => b.C);

От Ray Hayes (включая оператор Where; я переформатировал немного):

var query = listOfA.SelectMany(a => a.AList, (a, b) => b.C)
                   .Where(c => c.Length > 0);
52
ответ дан Jon Skeet 16 March 2009 в 16:59
поделиться
  • 1
    @William возможно использовать волновой эффект с ImageButton? – Vivek Kumar 13 March 2016 в 09:17

У меня также был бы подобный ответ, моя единственная модификация должна была добавить, где пункт, чтобы не иметь пустые строки (где C пуст):

listOfA.SelectMany( a => a.AList, (a, b) => b.C ).Where( c => c.Length > 0 );
16
ответ дан Ray Hayes 16 March 2009 в 16:59
поделиться
  • 1
    Необходимо будет также добавить android:clickable="true" к представлению – backslashN 22 June 2017 в 20:01
Другие вопросы по тегам:

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