react-native-navigation的迁移库

IdStack.java 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.reactnativenavigation.viewcontrollers;
  2. import android.support.annotation.NonNull;
  3. import com.reactnativenavigation.utils.StringUtils;
  4. import java.util.ArrayDeque;
  5. import java.util.Collection;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. public class IdStack<E> implements Iterable<String> {
  9. private final ArrayDeque<String> deque = new ArrayDeque<>();
  10. private final HashMap<String, E> map = new HashMap<>();
  11. public void push(String id, E item) {
  12. deque.push(id);
  13. map.put(id, item);
  14. }
  15. public E peek() {
  16. if (isEmpty()) {
  17. return null;
  18. }
  19. return map.get(deque.peek());
  20. }
  21. public E pop() {
  22. if (isEmpty()) {
  23. return null;
  24. }
  25. return map.remove(deque.pop());
  26. }
  27. public boolean isEmpty() {
  28. return deque.isEmpty();
  29. }
  30. public int size() {
  31. return deque.size();
  32. }
  33. public String peekId() {
  34. return deque.peek();
  35. }
  36. public void clear() {
  37. deque.clear();
  38. map.clear();
  39. }
  40. public E get(final String id) {
  41. return map.get(id);
  42. }
  43. public boolean containsId(final String id) {
  44. return deque.contains(id);
  45. }
  46. public E remove(final String id) {
  47. if (!containsId(id)) {
  48. return null;
  49. }
  50. deque.remove(id);
  51. return map.remove(id);
  52. }
  53. public boolean isTop(final String id) {
  54. return StringUtils.isEqual(id, peekId());
  55. }
  56. @NonNull
  57. @Override
  58. public Iterator<String> iterator() {
  59. return deque.iterator();
  60. }
  61. public Collection<E> values() {
  62. return map.values();
  63. }
  64. }