как автоматизировать камеру для Android в selenium webdriver

Ответ, как всегда, «это зависит». Это зависит от того, насколько большой будет возвращенная коллекция. Это зависит от того, изменяется ли результат со временем и насколько важна согласованность возвращаемого результата. И это сильно зависит от того, как пользователь может использовать ответ.

Во-первых, обратите внимание, что вы всегда можете получить сборку из потока, и наоборот:

// If API returns Collection, convert with stream()
getFoo().stream()...

// If API returns Stream, use collect()
Collection<T> c = getFooStream().collect(toList());

Итак, вопрос в том, что более полезно для ваших абонентов.

Если ваш результат может быть бесконечным, есть только один выбор: Stream.

Если ваш результат может быть очень большим, вы, вероятно, предпочитаете Stream, поскольку в материализации не может быть никакой ценности все это сразу, и это может создать значительное давление в куче.

Если все вызывающие вызовы будут выполняться, перебирайте его (поиск, фильтр, агрегат), вы должны предпочесть Stream, поскольку Stream имеет эти уже встроен, и нет необходимости в материализации коллекции (особенно если пользователь не может обработать весь результат). Это очень распространенный случай.

Даже если вы знаете, что пользователь будет повторять его несколько раз или иным образом держать его вокруг, вы все равно можете захотеть вернуть Stream вместо этого, поскольку тот факт, что какая-либо коллекция вы выбрали для ее размещения (например, , ArrayList) может быть не той формой, которую они хотят, а затем вызывающий должен ее скопировать. если вы вернете поток, они могут сделать collect(toCollection(factory)) и получить его в той форме, в которой они хотят.

Вышеупомянутые случаи «предпочитают поток» в основном происходят из-за того, что Stream более гибкий; вы можете опоздать на то, как вы используете его, не прибегая к издержкам и ограничениям для его воплощения в коллекцию.

Единственный случай, когда вы должны вернуть коллекцию, - это когда есть сильные требования к согласованности, и вы должны создать согласованный снимок движущейся цели. Затем вам нужно будет поместить элементы в коллекцию, которая не изменится.

Поэтому я бы сказал, что большую часть времени Stream - правильный ответ - он более гибкий, он не навязывает обычно - ненужные затраты на материализацию, и их можно легко превратить в Сборник по вашему выбору, если это необходимо. Но иногда вам, возможно, придется возвращать коллекцию (скажем, из-за сильных требований согласованности), или вы можете захотеть вернуть Collection, потому что знаете, как пользователь будет ее использовать и знать, что это самое удобное для них.

-4
задан DebanjanB 13 July 2018 в 13:33
поделиться