Skip to content

Instantly share code, notes, and snippets.

Avatar

Manabu Nakamura gakuzzzz

View GitHub Profile
@gakuzzzz
gakuzzzz / _0.md
Last active Sep 17, 2020
LinkedHashMapの初期化
View _0.md
@gakuzzzz
gakuzzzz / _0.md
Last active Sep 7, 2020
https://twitter.com/matarillo/status/1302048512771645440 フラットなデータ集合からネストしたグルーピングするのに foldMap が便利だよというお話
View _0.md

前提

こちらのツイート https://twitter.com/matarillo/status/1302048512771645440 をみて foldMap か foldLeft で簡単に書けるのでは?と思ったのが発端

データ構造がこんな感じだとして

  case class OrganizationRecord(
    id: Long,
    organizationLv1: String,
@gakuzzzz
gakuzzzz / 0_.md
Created Jul 6, 2020
Scala variance sample
View 0_.md
class Foo[+A]
class Bar[-A]

class Test1[A] {
  def piyo(a: A): Unit = ???      // OK
  def poyo(a: Foo[A]): Unit = ??? // OK
  def puyo(a: Bar[A]): Unit = ??? // OK
}
class Test2[+A] {
@gakuzzzz
gakuzzzz / 0_.md
Last active May 31, 2020
Doma2 Criteria API with Immutable entity.
View 0_.md

associateの例 を Immutable Entity でどうするか

1:1:N ぐらいなら collect で何とでもなる

    Employee_ e = new Employee_();
    Task_ t = new Task_();
    Address_ a = new Address_();

    Map<Employee, Tuple2<List<Task>, Optional<Address>>> result = nativeql
@gakuzzzz
gakuzzzz / FutureEitherTxBoundary.scala
Last active May 22, 2020
FutureEitherTxBoundary.scala
View FutureEitherTxBoundary.scala
object Sample {
implicit def futureEitherTxBoundary[A, B](implicit ec: ExecutionContext): TxBoundary[Future[Either[A, B]]] = new TxBoundary[Future[Either[A, B]]] {
def finishTx(result: Future[Either[A, B]], tx: Tx): Future[Either[A, B]] = {
onFinishTx(result) {
case Success(Right(_)) => tx.commit()
case Success(Left(_)) => tx.rollback()
case Failure(_) => tx.rollback()
}
@gakuzzzz
gakuzzzz / 0_.md
Last active Aug 15, 2019
ScalikeJDBC の Batch API に ParameterBinderFactory をかますためのヘルパー的なやつ
View 0_.md

利用シーン

val emps: Seq[Emp] = ...
val column = Emp.column
val (placeholders, batchParams) = createBatchParams {
  emps.map { emp =>
    Seq(
      column.id   -> emp.id,
      column.name -> emp.name
@gakuzzzz
gakuzzzz / 0.md
Last active Apr 2, 2019
EnumReverseLookup
View 0.md

共通コード

public class EnumReverseLookup<E extends Enum<E>, ATTR> {

    private final Class<E> enumClass;
    private final Function<E, ATTR> getter;

    public EnumReverseLookup(final Class<E> enumClass, final Function<E, ATTR> getter) {
        this.enumClass = enumClass;
View MyBiFunc.java
package jp.t2v.lab;
import java.util.function.Function;
@FunctionalInterface
public interface MyBiFunc<T, U, R> extends Function<T, Function<U, R>> {
@Override
default Function<U, R> apply(T t) {
return u -> apply(t, u);
@gakuzzzz
gakuzzzz / 0_readme.md
Last active Jun 27, 2020
Java Stream API で foldLeft/foldRight
View 0_readme.md

Java8以降の Stream API で畳み込みを行いたい場合は Stream#reduceCollectors.reducing を使用します。

しかし、Stream API は基本的に parallel で動作する事を考慮に入れる必要があるため、Stream#reduce および Collectors.reducing には強い制約があります。 つまり、初期値は必ず単位元である必要があり、演算は結合則を満たす必要があります。

試しにその制約を満たしていない引数を渡すと、結果が定まらない事が見て取れます。 例えば 50 という初期値から 1~100 までの数値を順番に引いていくと -5000 になるはずです。

IntStream.rangeClosed(1, 100).boxed().parallel().reduce(50, (a, b) -> a - b, (a, b) -> a + b); // -3250 になる
@gakuzzzz
gakuzzzz / index.md
Last active Dec 25, 2018
Spring で 値クラス変換
View index.md

やりたい事

  • 以下みたいな ID<T>Name<T> みたいな値っぽいクラスのインスタンスを Controller の引数として受け取りたい。
  • ID<T> みたいなクラスは随時増えるので、増えるたびに Converter まで作るのを避けるために AbstractAtomConverterFactory を定義して一度で済ませたい。
  • ConverterFactory どうやって書けばいいのん?

ソース

値っぽいクラス

You can’t perform that action at this time.