Зависит от информации, которую Вы хотите к дорожке времени. В одной компании мы должны были только отследить наши общие рабочие времена день (цель налога/социального страхования). easieast решение было: last
. Более детализированный Вы могли просто сделать что-то как
echo -e -n `date`\tProjectName\tTask\tComment >> MyTimeTable.txt
...whatever...
echo -e \t`date` >> MyTimeTable.txt
и procsessing с обычными подозреваемыми (grep, awk...).
, Когда Вам нужно еще больше функциональности, я не знаю никого, который работает без gui.
Нет стандартного способа, извините. Однако вы можете сделать это довольно легко с помощью стандартного JDK, не прибегая к добавлению зависимости от Apache Commons (как предлагали другие). Предполагая, что ваши списки представляют собой экземпляров List
:
List<T> oldList = ...
List<T> newList= ...
List<T> removed = new ArrayList<T>(oldList);
removed.removeAll(newList);
List<T> same = new ArrayList<T>(oldList);
same.retainAll(newList);
List<T> added = new ArrayList<T>(newList);
added.removeAll(oldList);
В стандартных библиотеках ничего нет.
Однако класс Apache Commons CollectionUtils предоставляет вам эту функциональность с помощью методов пересечения и вычитания:
Collection<T> old = ...;
Collection<T> neww = ...;
Collection<T> deleted = (Collection<T>)CollectionUtils.subtract(old, new);
Collection<T> updated = (Collection<T>)CollectionUtils.intersection(old, new);
Collection<T> newResult = (Collection<T>)CollectionUtils.subtract(new, old);
(Вам понадобится (не отмечено) приводит к приведению, поскольку CollectionUtils не генерируется.)
Я бы использовал Apache CollectionUtils и использовал бы функции объединения (элементы в обоих) и дизъюнкции (измените порядок, чтобы получить одно или другое).
В идеале вы должны пройти через все элементы вместо 3, но если это не ваше узкое место, я бы не стал беспокоиться об эффективности прямо сейчас.
Personally, I believe that the only sensible way to explain the difference between two lists is with a full-blown diff algorithm (like that of the unix diff command).
Sets, though, are a much simpler story. Google Collections provides a Sets.difference(Set, Set) method, as well as union and intersection.
Я думаю, вы тоже можете сделать это с помощью стандартной библиотеки java. Взгляните на следующие методы java.util.Collection:
keepAll (Collection c)
Сохраняет только элементы в этом коллекции, которые содержатся в указанная коллекция (необязательно операция). Другими словами, удаляет из этой коллекции все ее элементы, не содержащиеся в указанная коллекция.
removeAll (Collection c)
Удаляет все элементы этой коллекции. которые также содержатся в указанная коллекция (необязательно операция). После того, как этот вызов вернется, эта коллекция не будет содержать общие элементы с указанными Коллекция.
Если есть стандартный способ, я его не знаю ...
Я просмотрел Коллекции , но увидел только disjoint () (это уже информация ...) и indexOfSubList () (не уверен, что это вообще полезно).
Я также посмотрел на Google Collections , и если там, по-видимому, нет такой возможности, там есть несколько полезных инструментов, например, функция filter () Collections2 , которая может помочь, если вы сделаете правильный предикат.
[EDIT] Я пропустил методы removeAll и keepAll для Collection ... Я не удаляю этот ответ, даже если он немного жалок, поскольку он каким-то образом дополняет другие ответы ... (я думаю, что Google Collections - это по крайней мере, стоит упомянуть!)