Это должно сделать:
parents.stream()
.flatMap(parent -> parent.getChildren()
.stream()
.map(child -> new SimpleEntry<>(parent, child)))
.map(pair -> new Parent(pair.getKey().getName(),
Arrays.asList(pair.getValue())))
.collect(Collectors.toList());
Это просто создание пары родитель / потомок для каждого ребенка, а затем создание нового родителя для каждой из этих пар с одним дочерним элементом добавлено в поле children
. Затем он попадает в список Parent
.
Мне нужно исправить Джаррета Харди, и так как у меня недостаточно представителей, чтобы комментировать.
Глобальный охват не является проблемой. Python будет автоматически искать имена переменных во вложенных областях. Единственная проблема, когда вы хотите изменить значение. Если вы просто переопределите переменную, Python создаст новую локальную переменную, если вы не используете ключевое слово global. Итак,
originalTime = None
def doSomething():
if originalTime:
print "originalTime is not None and does not evaluate to False"
else:
print "originalTime is None or evaluates to False"
def doSomethingElse():
originalTime = True
def doSomethingCompletelyDifferent()
global originalTime
originalTime = True
doSomething()
doSomethingElse()
doSomething()
doSomethingCompletelyDifferent()
doSomething()
должен вывести:
originalTime is None or evaluates to False
originalTime is None or evaluates to False
originalTime is not None and does not evaluate to False
Я второй раз предупреждаю его, что это плохой дизайн.
Ваш код должен был работать, я предполагаю, что он внутри функции, но originalTime определен где-то еще.
Также немного лучше сказать originalTime is None
, если это то, что вы действительно хотите или даже лучше, не originalTime
.
Я только что попробовал ваш код в оболочке, но не получил ошибку. Он должен работать. Может опубликовать весь код? Вы также можете использовать try / catch.
Или, может быть, locals (). Has_key ('originalTime')?
Если оператор if
находится внутри функции, но объявления = Нет
находятся на уровне модуля, то переменные вне области внутри функции. Самое простое решение - явно указать, что идентификаторы переменных находятся в глобальной области видимости:
def doSomething():
global originalTime
if originalTime:
print "originalTime exists and does not evaluate to False"
Многие считают это плохим дизайном Python, кстати. Если вы согласны с этой оценкой и ваша архитектура позволяет, вы можете реорганизовать вашу функцию, чтобы она получала внешние зависимости в качестве аргументов функции.
def doSomething():
global originalTime
if originalTime:
print "originalTime exists and does not evaluate to False"
Многие считают это плохим дизайном Python, кстати. Если вы согласны с этой оценкой и ваша архитектура позволяет, вы можете реорганизовать вашу функцию, чтобы она получала внешние зависимости в качестве аргументов функции.
def doSomething():
global originalTime
if originalTime:
print "originalTime exists and does not evaluate to False"
Многие считают это плохим дизайном Python, кстати. Если вы согласны с этой оценкой и ваша архитектура позволяет, вы можете реорганизовать вашу функцию, чтобы она получала внешние зависимости в качестве аргументов функции.
На самом деле нет никакого "красивого" способа обойти это. Исходя из названий переменных, которые вы указали, мой первый инстинкт - создать объект:
class SomeTimeClass(object):
def __init__(self, recentTime=None, originalTime=None, postTime=None):
self.recentTime = recentTime
self.originalTime = originalTime
self.postTime = postTime
time = SomeTimeClass()
if not time.recentTime::
...
Это может сработать, потому что звучит так, как будто переменные коррелированы. Пара других опций:
Обернуть процедуру в функцию:
def SomeFunc(recentTime=None, originalTime=None, postTime=None):
if not recentTime:
...
Используйте диктовку:
some_dict = {}
if not some_dict.get('originalTime', None): #return None if key doesn't exist
...