com.spotify.mobius.Next类的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(7.8k)|赞(0)|评价(0)|浏览(96)

本文整理了Java中com.spotify.mobius.Next类的一些代码示例,展示了Next类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Next类的具体详情如下:
包路径:com.spotify.mobius.Next
类名称:Next

Next介绍

[英]This class represents the result of calling an Update function.

Upon calling an Update function with an Event and Model, a Next object will be returned that contains the new Model (if there is one) and Effect objects that describe which side-effects should take place.
[中]此类表示调用更新函数的结果。
调用带有事件和模型的更新函数后,将返回下一个对象,其中包含新模型(如果有)和描述应发生哪些副作用的效果对象。

代码示例

代码示例来源:origin: spotify/mobius

  1. @Override
  2. public void afterUpdate(M model, E event, Next<M, F> result) {
  3. if (result.hasModel()) {
  4. LOGGER.debug(LOGGING_PREFIX + "Model updated: {}", loggingTag, result.modelUnsafe());
  5. }
  6. for (F effect : result.effects()) {
  7. LOGGER.debug(LOGGING_PREFIX + "Effect dispatched: {}", loggingTag, effect);
  8. }
  9. }

代码示例来源:origin: spotify/mobius

  1. @Nonnull
  2. @Override
  3. public Next<M, Object> update(M model, E event) {
  4. return Next.next(update.apply(model, event));
  5. }
  6. },

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void canMergeInnerEffects() throws Exception {
  3. Next<String, String> outerNext = Next.next("m", effects("f1", "f2"));
  4. Next<?, String> innerNext = dispatch(effects("f2", "f3"));
  5. Next<String, String> merged =
  6. Next.next(
  7. outerNext.modelOrElse("fail"), unionSets(innerNext.effects(), outerNext.effects()));
  8. assertEquals(Next.next("m", effects("f1", "f2", "f3")), merged);
  9. }

代码示例来源:origin: spotify/mobius

  1. @Nonnull
  2. @Override
  3. public Next<M, F> handleInnerEffects(M model, boolean modelUpdated, Set<FI> innerEffects) {
  4. return modelUpdated ? Next.<M, F>next(model) : Next.<M, F>noChange();
  5. }
  6. };

代码示例来源:origin: spotify/mobius

  1. /**
  2. * Get the model of this Next. This version is unsafe - if this next doesn't have a model, calling
  3. * this method will cause an exception to be thrown.
  4. *
  5. * <p>In almost all cases you should use {@link #modelOrElse} or {@link #ifHasModel} instead.
  6. *
  7. * @throws NoSuchElementException if this Next has no model
  8. */
  9. @Nonnull
  10. public M modelUnsafe() {
  11. if (!hasModel()) {
  12. throw new NoSuchElementException("there is no model in this Next<>");
  13. }
  14. // we know model is never null here since we just checked it.
  15. //noinspection ConstantConditions
  16. return model();
  17. }

代码示例来源:origin: spotify/mobius

  1. /**
  2. * Try to get the model from this Next, with a fallback if there isn't one.
  3. *
  4. * @param fallbackModel the default model to use if the Next doesn't have a model
  5. */
  6. @Nonnull
  7. public M modelOrElse(M fallbackModel) {
  8. checkNotNull(fallbackModel);
  9. if (hasModel()) {
  10. return modelUnsafe();
  11. } else {
  12. return fallbackModel;
  13. }
  14. }

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void nextNoEffectsOnlyHasModel() throws Exception {
  3. Next<String, String> next = Next.next("foo");
  4. assertTrue(next.hasModel());
  5. assertFalse(next.hasEffects());
  6. }

代码示例来源:origin: spotify/mobius

  1. @Nonnull
  2. @Override
  3. public Next<M, F> handleInnerEffects(M model, boolean modelUpdated, Set<FI> innerEffects) {
  4. if (innerEffects.isEmpty()) {
  5. return modelUpdated ? Next.<M, F>next(model) : Next.<M, F>noChange();
  6. }
  7. Set<F> effects = new HashSet<>();
  8. for (FI innerEffect : innerEffects) {
  9. F outerEffect = checkNotNull(f).apply(innerEffect);
  10. effects.add(checkNotNull(outerEffect));
  11. }
  12. if (modelUpdated) {
  13. return Next.next(model, effects);
  14. } else {
  15. return Next.dispatch(effects);
  16. }
  17. }
  18. };

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void canMergeInnerEffectsAndModel() throws Exception {
  3. Set<String> effects = setOf("f1", "f2");
  4. Next<Integer, String> innerNext = Next.next(1, effects("f2", "f3"));
  5. Next<String, String> merged =
  6. Next.next("m" + innerNext.modelOrElse(0), unionSets(effects, innerNext.effects()));
  7. assertEquals(Next.next("m1", effects("f1", "f2", "f3")), merged);
  8. }

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void testEquals() throws Exception {
  3. Next<String, String> m1 = new AutoValue_Next<>("hi", ImmutableUtil.<String>emptySet());
  4. Next<String, String> m2 = Next.next("hi");
  5. Next<String, String> m3 = Next.next("hi", ImmutableUtil.<String>emptySet());
  6. Next<String, String> n2 = Next.next("hi", effects("a", "b"));
  7. Next<String, String> n3 = Next.next("hi", effects("b", "a"));
  8. Next<String, String> n4 = Next.next("hi", ImmutableUtil.setOf("b", "a"));
  9. Next<String, String> o2 = Next.next("hi", effects("a", "c", "b"));
  10. Next<String, String> o3 = Next.next("hi", effects("b", "a", "c"));
  11. Next<String, String> o4 = Next.next("hi", ImmutableUtil.setOf("c", "b", "a"));
  12. Next<String, String> p2 = Next.dispatch(effects("a", "c", "b"));
  13. Next<String, String> p3 = Next.dispatch(effects("b", "a", "c"));
  14. Next<String, String> p4 = Next.dispatch(ImmutableUtil.setOf("c", "b", "a"));
  15. Next<String, String> q2 = Next.next("hey");
  16. Next<String, String> q3 = Next.next("hey", Collections.<String>emptySet());
  17. Next<String, String> r2 = Next.next("hey", effects("a", "b"));
  18. Next<String, String> s2 = Next.next("hey", effects("a", "b", "c"));

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void nextNoopHasNoModelAndNoEffects() throws Exception {
  3. Next<String, String> next = noChange();
  4. assertFalse(next.hasModel());
  5. assertFalse(next.hasEffects());
  6. }

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void shouldNotBeSensitiveToExternalMutation() throws Exception {
  3. Set<String> inputs = new HashSet<>();
  4. inputs.add("in");
  5. Next<String, String> next = Next.next("#", inputs);
  6. inputs.add("don't want to see this one");
  7. assertThat(next.effects(), equalTo((Set) Sets.newHashSet("in")));
  8. }

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void nextEffectsOnlyHasEffects() throws Exception {
  3. Next<String, String> next = dispatch(effects("foo"));
  4. assertFalse(next.hasModel());
  5. assertTrue(next.hasEffects());
  6. }

代码示例来源:origin: spotify/mobius

  1. @SuppressWarnings("unused")
  2. private Next<?, Number> canInferFromVarargOnlyEffects() {
  3. return dispatch(effects((short) 1, 2, (long) 3));
  4. }

代码示例来源:origin: spotify/mobius

  1. synchronized void update(E event) {
  2. if (!initialised) {
  3. eventsReceivedBeforeInit.add(event);
  4. return;
  5. }
  6. Next<M, F> next = store.update(event);
  7. next.ifHasModel(
  8. new Consumer<M>() {
  9. @Override
  10. public void accept(M model) {
  11. dispatchModel(model);
  12. }
  13. });
  14. dispatchEffects(next.effects());
  15. }

代码示例来源:origin: spotify/mobius

  1. @Override
  2. protected boolean matchesSafely(Next<M, F> item, Description mismatchDescription) {
  3. if (!item.hasEffects()) {
  4. mismatchDescription.appendText("no effects");
  5. return false;
  6. } else if (!matcher.matches(item.effects())) {
  7. mismatchDescription.appendText("bad effects: ");
  8. matcher.describeMismatch(item.effects(), mismatchDescription);
  9. return false;
  10. } else {
  11. mismatchDescription.appendText("has effects: ");
  12. matcher.describeMismatch(item.effects(), mismatchDescription);
  13. return true;
  14. }
  15. }

代码示例来源:origin: spotify/mobius

  1. @Test
  2. public void testHasModelSpecificButMissing() throws Exception {
  3. next = noChange();
  4. matcher = hasModel(equalTo("a"));
  5. assertFalse(matcher.matches(next));
  6. matcher.describeMismatch(next, desc);
  7. assertEquals("no model", desc.toString());
  8. }

代码示例来源:origin: spotify/mobius

  1. @Override
  2. protected boolean matchesSafely(Next<M, F> item, Description mismatchDescription) {
  3. if (item.hasModel()) {
  4. mismatchDescription.appendText("has a model");
  5. return false;
  6. } else {
  7. mismatchDescription.appendText("no model");
  8. return true;
  9. }
  10. }

代码示例来源:origin: com.spotify.mobius/mobius-core

  1. /** Check if this Next contains effects. */
  2. public final boolean hasEffects() {
  3. return !effects().isEmpty();
  4. }

代码示例来源:origin: spotify/mobius

  1. @Nonnull
  2. synchronized Next<M, F> update(E event) {
  3. Next<M, F> next = update.update(currentModel, checkNotNull(event));
  4. currentModel = next.modelOrElse(currentModel);
  5. return next;
  6. }
  7. }

相关文章