JAVA関連のことを調べてみた2020年05月01日

JAVA関連のことを調べてみた2020年05月01日

【Java】HashMapの要素を拡張for文を使ったループ制御で取得する方法

##開発環境
・ホストOS: Windows10 Home
・ゲストOS: WSL2 Ubuntu20.04 LTS
・VScode ver 1.44.2
・openjdk 11.0.7

##概要
・拡張for文を使ってHashMapの各要素を取得します。配列やリストと比較してやや複雑な文になります。

##サンプルコード

“`java

HashMap map = new HashMap();

map.put(“犬”, 3);
map.put(“猫”, 10);
map.put(“兎”, 5);
“`

##①keyを取得する

**keySet()**メソッドを使います

“`java

for(String animal : map.keySet()) {
System.outprintln(animal);
}
“`

出力結果

“`



“`
(※HashMapは配列やリストと異なり順番が担保されません)

##②valueを取得する

**values()**メソッドを

元記事を表示

MapをMapに変換する(MapのValueを変換する)

# 概要

Mapのvalues()を一括で別のクラスに変換したいとき、どのように書けばよいのでしょうか。
`Map`を`Map` に変換するサンプルで、説明してみます。

# 実装案

## 案1: for文を使う
“`java
public Map strToInt(final Map map) {
final Map ret = new HashMap<>();
for (final Map.Entry entry : map.entrySet()) {
ret.put(entry.getKey(), Integer.valueOf(entry.getValue()));
}
return ret;
}
“`

とりあえずJava 7までの書き方で書いたものです。冗長であり、本質的でないコードが多いですね。

## 案2: Java

元記事を表示

Java Silverメモ

test

元記事を表示

文字列の中に変数を入れる記法

自分はもともとRubyでプログラミングに触れて、eRubyでCGIを書いたりしてたから文字列の中に`{}`でくくった変数を入れるのを多用していたのですが。

~~~HelloWorld.rb
str1 = “Hello”
str2 = “World!”
print “#{str1}, #{str2}\n”
~~~

これをC#で書こうとしたらこうなります。

~~~HelloWorld.cs
var str1 = “Hello”;
var str2 = “World!”;
Console.Write($”{str1}, {str2}\n”) ;
~~~

別解でこういう風にも書けるようです。

~~~HelloWorldAlt.cs
var str1 = “Hello”;
var str2 = “World!”;
Console.Write(“{0}, {1}\n”, str1, str2);
~~~

ところで、最近Javaをはじめたのですが、Javaだとこういう風に書くみたいです。

~~~HelloWorld.java
var str1 = “Hello”;
var str2 =

元記事を表示

こんなコードは嫌だ!現場で実際に見たアンチパターン集

# はじめに
内容はタイトルの通りなのですが、アンチパターンなコードを書いた人をこき下ろす意図は一切ありません。コードを憎んで人を憎まずという言葉もありますしね。[^code]
[^code]: ググってみたら本当にありました。

そのようなネガティブな動機ではなく、アンチパターンからできるだけ教訓を汲み取って前に進もうというポジティブな動機で筆を執っています。

全体的に古い話が多いので、最近はこのようなコードや状況が減っていたらいいな、と願っているところです。

# 環境
* 主にJava 6

# 内容
## Struts1を拡張したオレオレフレームワークの使用
ご存知の方も多いでしょうけど、Struts1はもう何年も前にサポートが切れているので、この時点で嫌な予感しかしないところです。

Strutsをそのまま使うならまだいいんですが、そのプロジェクトでは見出しの通りStrutsを拡張したオレオレフレームワークを使っていました。そのフレームワークでは、1リクエストの処理を書くのに大量のクラスを作成する必要があり、StrutsのActionやFormBean、ビジネスロジックを記

元記事を表示

「徹底攻略 Java SE 11 Silver 問題集」から学ぶオブジェクト指向設計

# 前置き

現在参画している現場でJavaの案件に携わることになりました。
しかし、エンジニア歴15年目になるにも関わらずずっと.NET周りの技術しか扱ってこなかったので、今回が初のJava案件になります。
そこでJavaの基礎知識をゼロベースで学ぶために、Java SE 11 Silver/Goldの取得を目標とした学習を始めることにしました。

学習を始めるに当たり、まずは[徹底攻略 Java SE 11 Silver 問題集](https://www.amazon.co.jp/dp/4295007625/)(いわゆる「黒本」を購入しました。

回答の解説が非常に丁寧に記載されているので、試験対策だけでなく基礎知識を学ぶのに最適な教材だと感じたのですが、自分は書籍内で「参考(試験対策と直接関係ないが、知っておくと有益な情報)」と記載されている箇所に注目しました。

「参考」の箇所でも、特に今後「オブジェクト指向」を深堀りしていくのであれば非常に重要となる記述が散見されたので、今回の記事ではそれらをまとめてみようと思います。

# P51より:不変(immutable)オブジェクト

元記事を表示

【Java】Resource interpreted as Stylesheet but transferred with MIME type text/html

CSSが適用されなくてずっとハマっていた時の話。せっかくなのでここに書き留めておく。
ちなみに、Javaのコードに原因があった話なので関係ない方は参考にならないと思います。

#環境
OS: Windows10
サーバー: Apache Tomcat 9.0.26
Java: JDK13
HTML: HTML5
CSS: CSS3

#ブラウザで警告が出ていた
 CSSは正しくダウンロードされているのに、適用されていない。ブラウザの開発ツールを見ると、この警告が出ていた。

`Resource interpreted as Stylesheet but transferred with MIME type text/html`

*Internet ExplorerやMicrosoft Edgeだと次のような警告になる。

`SEC7113: CSS は、MIME の種類が一致しないため、無視されました`

いくつかのブラウザで試しても同じだったので、サーバー側に問題があることは察しがついた。

#行きついた原因
 原因は、次のコードにあった。クラス名やメソッド名から分かる通り、フィル

元記事を表示

読みやすいコードを意識するために

# 読みやすいコードを意識する

気を抜くと冗長なコードになりがちになるので、意識づけのために
可読性の高くなるポイントについてまとめました。

##条件式を簡潔化

“`java:java
if (a == 1 && b == 2 && c == 3 && d == 4){
System.out.println(“test”);
}

//if 文の条件式を折り返す

if (a == 1 &&
b == 2 &&
c == 3 &&
d == 4){
System.out.println(“test”);
}

//メソッドを作り可読性をあげる
if (output()){
System.out.println(“test”);
}

private boolean isValidType(){
//処理
return true;
}
“`

##ネストが深すぎる

“`java:java
//NG
if(a == 1){
if(b == 2){
if(c == 3){
if(d == 4){

元記事を表示

AWS LambdaのJavaは遅い?

AWS Lambdaで動作するJavaは初回が遅いですが、速くする方法がないか調べました。
末尾にある参考サイトの内容にたどり着いて、実際に試してみたのでその記録です。

レイテンシ情報はX-Rayにて取得しました。

# テスト対象

S3にファイルをPUTするだけのものです

“`java
S3Client s3 = S3Client.builder().region(Region.AP_NORTHEAST_1).build();
PutObjectResponse result = s3.putObject(
PutObjectRequest.builder().bucket(ENV_BUCKET).key(“filename.txt”).build(),
RequestBody.fromString(“contents”));
“`

# 検証1 普通に実行

まずは普通に試してみます。

ソース全体

“`java
package helloworld;

import c

元記事を表示

TabLayoutとViewPagerを利用したタブの実装

初めてQiitaに投稿させてもらいます! 今までは多くの方々の記事を見て、たくさん勉強をさせてもらっていましたが、自分も多くの方々の参考になるような記事を書いていけるよう努めますので、よろしくお願いします。

本題ですが、TabLayoutを使用しているときに、ActivityのToolbarのメニューをクリックしてFragmentのメソットを呼びたかったのですが、分かりやすく書いているページがすぐには見つからなかったのでまとめます。
まずは、TabLayoutとViewPagerを使ったシンプルなタブの実装を紹介します。タブの実装を紹介している記事は多くありますが、この記事ではMaterialDesignを考慮したりして作っていこうと思います。次の記事でActivityからFragmentを操作する方法とFragmentからActivityを操作する方法をまとめようと思います。

# タブの実装(表示まで)

  • TabLayout … ActivityのLayout.xmlに記載するユーザーが操作する「タブ」のバーに値するもの。TabLayoutに個々のタブが動的に
元記事を表示

ActivityとFragment、両方向の操作

前回実装したタブ(TabLayoutとViewPagerを利用したタブの実装 – Qiita)をさらに拡張していきます。今回はActivityからViewPager内のFragmentのメソッドを呼ぶ方法と、ViewPager内のFragmentからActivityのメソッドを呼ぶ方法を紹介します。
#ActivityからFragmentを操作する
##使用例
ActivityのToolbarに作成したメニューがクリックされた時に、Fragment内のEditTextに入力された文字列を保存して、Activityを終了する。
##流れ
1.FragmentにToolbarのメニューがクリックする時に呼ばれるpublicなメソッドを作成する。
2.Toolbarのメニューがクリックされた時、ViewPagerでどのFragmentが表示されているかを取得する。
3.取得されたFragmentによって、1で作成したメソッドを呼ぶ。
4.Activ

元記事を表示

MacOSでのPostgresSQLを用いたJDBCの始め方

## はじめに

JDBCを触る機会があったのですが、個人用の環境でも練習したいと思い、PostgreSQLを導入した際の手順です。基本的には備忘録です。

## 各種バージョン等

- macOS : 10.15.4
- JDK : 13.0.1
- PostgreSQL : 12.2
- JDBC Driver : 42.4.12
- ターミナル : bash

## Homebrewを用いてPostgreSQLをインストール

– [MacにPostgreSQLを導入する方法&初期設定をおこなう](http://vdeep.net/mac-postgresql)

上記の記事を参考にPostgreSQLをインストールします。
以下では、userとpasswordは`postgresql`として説明します。

## PostgreSQL JDBC Driverをダウンロード

– [PostgreSQL公式](https://jdbc.postgresql.org/download.html)

上記ページからJDBC Driverをダウンロードします。

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder ATC 002 A

# はじめに
AtCoder Typical Contest(ATC) とは、競技プログラミングにおける、典型問題を出題するコンテストです。
AtCoder さん、ありがとうございます。
# 今回のお題
*[AtCoder Typical Contest 002 A – 幅優先探索](https://atcoder.jp/contests/atc002/tasks/abc007_3)*

今回のテーマ、幅優先探索
# Ruby
DFS(深さ優先探索)とBFS(幅優先探索)の違いについて、いろいろあると思いますが、ここではデータの流れに注目します。

||DFS|BFS|
|:–:|:–:|:–:|
||後入れ先出し|先入れ先出し|
|データ構造|スタック|キュー|
|データを入れる|push|push|
|データを取り出す|pop|shift|

“`ruby.rb
r, c = gets.split.map(&:to_i)
sy, sx = gets.split.map(&:to_i)
gy, gx = gets.split.map(&:to_i)
cm = Array.ne

元記事を表示

IBMの「Liberty」について整理する

IBMから提供されているJava EE対応のアプリケーションサーバー「WebSphere Application Server」には,2012年からLibertyという新しいランタイムが提供されています。このLibertyという言葉はいろいろな意味で使われることがあり,混乱しているケースが(IBM社員でも)しばしばみられますので,整理してみたいと思います。

# ランタイム

– Libertyプロファイル / WebSphere Liberty

前者はWAS V8.5の時の名称で,後者はV9.0での名称です。2012年に出荷されたV8.5から新しく追加されたランタイムです。クラウド自体に対応するために新たに開発されたランタイムで,完全モジュール化された軽量・高速なランタイムで,DevOpsやコンテナなどのモダンな環境にも適しています。

現在も活発に新機能の開発や新仕様への対応などが続けられています。

– Fullプロファイル / WebSphere traditional

前者はWAS V8.5の時の名称で,後者はV9.0での名称です。tWASとよばれることもあります。

1

元記事を表示

触って覚えるgradle

# gradleって何が嬉しいの?
 これはDockerを人に勧める時にも同じことを思ったんだけど、正直口で言って良さを伝えるのは難しい。
 gradleにしてもDockerにしてもどの部分に魅力を感じるかは人それぞれってのもあるし、便利を伝えてみても実感として伴わない。聞いてる方は「なるほど、便利そうだね」という位置に留まる。
 そもそも「マジかよ! じゃあ早速使ってみるよ!」って人は、自分でガシガシ触ってみて、どういうものか掴もうとするから説明の必要がない。
 自分で「とりあえず使う」が出来るればいい。しかしそれをやれるスキルに至っていないという事が多々ある。とりあえず……何をすればいいんだろう?

 よってこの記事のタグには「研修」をつけている。
 世界に数多ある有用なツールを自分で戦力化できるようになるためには、いくつかのツールを戦力化するという実績を積むのが一番の近道だろう。

 この記事は、gradleを自分の戦力として扱うための手助けをする。
 何が嬉しいか分かった時、その時にはすでに武器を一つ手に入れている。

# gradleのインストール
 この記事では開発マシンの

元記事を表示

Eclipseのm2eプラグインとMavenの関係

タイトル通りですが、初心者すぎて私がわからなかったのでメモっておきます。

## m2eプラグイン
これは、Eclipse上からMavenを実行するためのプラグインです。
今回、JavaEE開発用のEclipseを使いましたが、その場合はデフォルトで入っています。

## わからなかったポイント
Eclipse上で右クリックしてMavenの実行を行うと、ポップアップが表示され、ゴールを指定する画面が出てきます。

一方で、世に出回っているMavenの記事を参照すると

“`
mvn compile
“`

のようなコマンドが良く出てきます。
私はこの関連性がよくわからず、mvnコマンドを実行したいんだけど、コマンド引数はどこに設定すればいいんだろう?と思ってました。

## Eclipse上でMavenを実行するには

m2eプラグインで表示されるポップアップのゴールに設定するのは、上記で言えば「compile」の部分です。
mavenではmvnコマンドの後にゴールを指定するという書式になっており、ものすごく大雑把に言うとmvnコマンドの引数=ゴールというイメージになります。

元記事を表示

SpringBootプロジェクトのGradleタスクを眺める

## Gradleのタスクを眺める

下のコマンドでタスクの一覧を見ることができる。

“`powershell
.\gradlew.bat task –all
“`

下のように表示される。

“`
> Task :tasks

————————————————————
Tasks runnable from root project
————————————————————

Application tasks
—————–
bootRun – Runs this project as a Spring Boot application.

Build tasks
———–
assemble – Assembles the outputs of this project.
bootJar – Assembles an executable jar archive containin

元記事を表示

JavaでDB接続をしてみる

### JavaでDBを操作するには
Javaで使うMySQLをドライバーを入手し、プロジェクトに追加する

#### SQLドライバーを入手
以下のURLにアクセスし、`Select Operating System:`の下にあるセレクトボックスを`Platform Independent`にして
zipをダウンロードし、解凍する。(ダウンロード先はどこでもOK)
[SQLドライバー](https://dev.mysql.com/downloads/connector/j/)
スクリーンショット 2020-04-30 14.35.36.png

解凍したら`jarファイル`ができる。

#### プロジェクトに追加
解凍したSQLドライバーをプロジェクトに追加する。
`Eclipse`で作ったプロジェクトの`We

元記事を表示

#Scala: vol2: 【akka-grpcでgoogle/protobuf/*.proto をimportする方法】

# #Scala: vol2: 【akka-grpcでgoogle/protobuf/*.proto をimportする方法】

## 問題

[akka-grpc](https://github.com/akka/akka-grpc)で開発時に、
`google/protobuf/*.proto` のimportができずに、

“`:sbt-console
Import “google/protobuf/timestamp.proto” was not found or had errors
“google.protobuf.Timestamp” is not defined.
“`

となってしまったので、その解決策についてご紹介します。

## 解決策

https://github.com/akka/akka-grpc/issues/681

> Find the ones you need in protocolbuffers/protobuf:src/google/protobuf@master , download and put them alongside

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder ABC 047 C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest 047 C – 一次元リバーシ](https://atcoder.jp/contests/abc047/tasks/arc063_a)*
Difficulty: 650

今回のテーマ、正規表現
# Ruby
例えば、`WWWWBBWBBB` を W B でそれぞれまとめますと `WBWB` となり、3回で一色にできることが分かります。
こういう文字列の処理は正規表現を使用すると簡単に解けます。
*[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f58

元記事を表示

OTHERカテゴリの最新記事