java实现查找共同好友

package com.doit.java.enhance.day1.example1;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class SearchSameFriends {

public static void main(String[] args) throws Exception {

    /**
     * 使用配置文件完成初始化
     */
    Properties p = new Properties();
    p.load(SearchSameFriends.class.getClassLoader().getResourceAsStream("config.properties"));
    String srcPath = p.getProperty("srcPath");

     Map map1 = sortByFriends(srcPath);
     map1.forEach((k, v) -> System.out.println(k + "的好友数量 : " + v));//
    // 得到用户的姓名和好友数量

    List list = FindSameFriends(srcPath, "A", "B");
    list.forEach(e -> System.out.println(list));//
    //System.out.println(list);
}

/**
 * 
 * @param srcPath
 *            源数据路径
 * @param uid1
 *            用户uid1
 * @param uid2
 *            用户uid2
 * @return 返回两个用户的共同好友List
 * @throws Exception
 */
public static List FindSameFriends(String srcPath, String uid1, String uid2) throws Exception {

    Map> mp = new ConcurrentHashMap<>();
    // 读取文件
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(srcPath), "UTF-8"));

    String line = null;
    while ((line = br.readLine()) != null) {
        // 对读取的每行数据做业务处理
        String[] split = line.split(":");// 用":"切割单词
        String name = split[0];// 用户姓名
        String fs = split[1];// 用户的好友列表

        String[] fsArr = fs.split(",");
        List list = Arrays.asList(fsArr);// asList方法得到一个只读的list集合
        ArrayList list2 = new ArrayList<>(list);// 得到一个可操作的list2集合

        mp.put(name, list2);// 把每个用户的姓名和用户存放到HashMap>
    }

    /**
     * 得到用户uid1和用户UId2的共同好友
     */
    List list1 = mp.get(uid1);
    List list2 = mp.get(uid2);
    list1.retainAll(list2);

    br.close();
    return list1;
}

/**
 * 
 * @param srcPath
 *            源数据路径
 * @return 返回存放用户姓名和好友数量的Map
 * @throws Exception
 */
public static Map sortByFriends(String srcPath) throws Exception {
    LinkedHashMap map = new LinkedHashMap<>();
    HashMap map2 = new HashMap<>();

    // 读取文件
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(srcPath), "UTF-8"));

    String line = null;
    while ((line = br.readLine()) != null) {
        // 对每一行做业务处理
        String[] split = line.split(":");// 用":"切割单词
        String name = split[0];// 用户姓名
        String fs = split[1];// 用户的好友列表

        String[] fsArr = fs.split(",");// 用","切割得到用户的好友数组

        map2.put(name, fsArr.length);// 把用户姓名和好友数放入HashMap
    }

    // 对map2做降序排列
    Set> entrySet = map2.entrySet();
    ArrayList> list = new ArrayList<>(entrySet);

    Collections.sort(list, (o1, o2) -> o2.getValue() - o1.getValue());// 得到排好序的list

    for (Entry entry : list) {
        map.put(entry.getKey(), entry.getValue());// 用LinkedHashMap存放数据
    }
    br.close();
    return map;
}

}

你可能感兴趣的:(学习总结)