Если классы Car
и Computer
еще не реализуют общий интерфейс, и вам нужно сделать это без изменения классов, вы можете передать дополнительный параметр, функцию для извлечения String
из перечислите элементы:
private <T> List<T> removeSameColor(List<T> list, Function<? super T, String> fn) {
Set<String> colorSet = new HashSet<>();
Iterator<T> iterator = list.iterator();
while (iterator.hasNext()) {
if(!colorSet .isEmpty() && colorSet .contains(fn.apply(iterator.next()))) {
iterator.remove();
}
else{
colorSet.add(fn.apply(iterator.next()));
}
}
return list;
}
и вызывайте как:
removeSameColor(listOfCars, Car::getColour);
removeSameColor(listOfComputers, Computer::getColour);
Обратите внимание, что вы дважды вызываете iterator.next()
в теле цикла. Возможно, вы захотите сохранить его в переменной:
T value = iterator.next();
if (!colorSet.isEmpty() && colorSet.contains(fn.apply(value))) {
iterator.remove();
} else {
colorSet.add(fn.apply(value));
}
На самом деле вы можете просто сохранить String color = fn.apply(iterator.next())
, а затем использовать его вместо fn.apply(value)
.
А затем вы можете еще больше упростить цикл, используя возвращаемое значение Set.add
:
while (iterator.hasNext()) {
String color = fn.apply(iterator.next());
if (!colorSet.add(color)) {
iterator.remove();
}
}
Для использования VSTO, необходимо было установить Office. Единственный PIA's VSTO обеспечивает контейнер между.NET и COM-интерфейсами, которые выставляет Office. Таким образом, PIA's ничего не может сделать w/o Office.
Что Вы хотите сделать с Primary Interop Assemblies точно? Я думаю, что необходимо разъяснить вопрос немного.
Если Вы планируете создание каких-либо вызовов метода PIA DLLs Microsoft Office без Office, установил Вас, может ожидать, что Ваш код аварийно завершится с COMException, когда Вы выполняете его, так как Office не должен там взаимодействовать с.
примечание: можно генерировать docx (Word 2007) файлы без офиса.
Если то, что Вы хотите сделать, создают документы Word без MS Word, устанавливаемого затем, Ваш наилучший вариант состоит в том, чтобы использовать одну из доступных программ, чтобы сделать это. Это обычно, как документы Word/Excel создаются на веб-сервере, например.
Для генерации документов MS Word, мы использовали и Syncfusion DocIO (и XlsIO для Excel) и OfficeWriter, и они были намного легче и буквально в 5 - 30 раз быстрее в генерации документов, чем MS Word (в зависимости от сложности документа). Однако эти инструменты не являются бесплатными. Я предполагаю, что теоретически возможно генерировать docx файлы вручную (как подсказал Tracker1), но это будет большой работой, если не будут свободные библиотеки для помощи в выполнении этого.